Skocz do zawartości

gnysek

Administratorzy
  • Postów

    9 805
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    138

Odpowiedzi opublikowane przez gnysek

  1. Dokładnie tak. A przed chwilą próbowałeś pod jedną wartością mieć dwie zmienne - i liczbę i tablicę jednocześnie. Tablica w tablicy to generalnie stara tablica 2D, jedyna różnica teraz, to że za każdym razem możesz mieć inną ilość elementów jeśli chcesz, ale jak się pilnujesz, to używasz je tak samo (i nawet zapis grid[1, 2] powinien działać).

  2. O UDP mówią, że jest jak krzyczenie na ulicy. Wiesz, że krzyknąłeś, ale nie wiesz, czy ktoś słyszał :D

    NIe bawiłem się w obecny gmowy networking, ale wątpię, żeby pakiety były łączone - wtedy byśmy je nazwali buforem, a nie pakietami. Kiedyś obieraliśmy wersję, że pozycję można wysyłać przez UDP, bo utracenie pakietu niewiele zmieni, natomiast itemy, czy fakt np. użycia umiejętności wysyła się TCP.

     

    Możesz połączyć pomysły i np. wysyłać pozycję + jakiś zakres danych które nie muszą być tak często odświeżane (np. jakąś strefę mapy widocznej przez gracza), zapewne jeśli jest tam sporo nieruchomych przedmiotów, to nawet wysłanie raz na 1-3 sekundy synchronizacji skrawka mapy nie będzie powodować po stronie gracza jakichś zauważalnych problemów. Można też wtedy ustawić, że jak przez np. 5 sekund nie przyszły dane, to się dana rzecz sama usunie.

     

    Zawsze jednak wszystko wychodzi dopiero w praniu i przy obciążeniu, więc testy to najlepsze rozwiązanie.

  3. Ale jak uniesz tą linijkę, to sie nie wykonuje reszta kodu. Zatem display_set_gui_maximize nie musisz uzywać, tak by wychodziło. Co do application_surface i viewów... no to tak jak sobie chcesz zrobić, tak musisz to ustawić, ja nie będę za Ciebie zgadywał. Musisz sam ustalić, czy na pełnym ekranie gra ma być powiększona czy 1:1, tak samo w trybie okienkowym. I samemu przeskalować to, przeliczyć proporcje itd. Nie jestem wróżką, żeby wiedzieć co chcesz osiągnąć, a application_surface, viewy i gui to trzy różne warstwy które mogą mieć różne rozmiary. Do tego application surface samemu powinno sie w jakimś post_draw rysować i wtedy też można to robić z innym rozmiarem niż 1:1, więc za dużo tu jest czynników i trzeba pod siebie wszystko ustawić po prostu, spokojnie to rozrysowując i przeliczając na kartce papieru.

  4. Za dużo tego, żeby ktokolwiek czytał. Jeśli chcesz zadawać pytania, to musisz konkretnie, a nie ścianę kodu. Jeśli zmieniasz rozmiary okien, to musisz umieć dzielić i mnożyć, żeby ustalić proporcje.

    Poza tym korzystasz z GMS 1.4, które nie jest wspierane już trzeci rok, więc tam rzeczy działają inaczej i już nie bardzo nawet mam ochotę się cofać do różnic z wersją obecną, a akurat na tym tle są.

    Rozmiary okien, widoków, skalowania można ustawiać na różne sposoby - im więcej tym mieszasz, tym łatwiej wpaść w tarapaty, wiec zawsze, ale to zawsze sprawdź jakie są wartości wszystkiego i czy są odpowiednie proporcje - odpowiedzi powinny wtedy przyjść same.

     

    btw.

     

    if (window_get_fullscreen()) {
    options[|2]=("Fullscreen")
    } else {
    options[|2]=("Window")
    }
    Przecież napis się nie zmienia, bo go ustawiasz na sztywno w create (tworząc zawsze nową mapę) a zmieniasz tylko jak klikasz enter, wiec oczywiste, że się nie zmieni sam, bez kliknięcia.
  5. Dobra, wiem gdzie jest pies pogrzebany. window_get_size() przez pierwsze kilka klatek po wyjściu z pełnego ekranu nadal zwraca wielkość ekranu na fullscreenie i dlatego jest błąd. Poprawiłem go tak:

     

    // create
    
    display_set_gui_size(1280, 720)
    full_screen = -1;
    
    // step
    
    if (full_screen != window_get_fullscreen()) {
    	full_screen = window_get_fullscreen();
    	alarm[0] = 10;
    }
    
    // alarm0
    
    if (full_screen) {
    	display_set_gui_maximize( 1, 1 );
    } else {
    	display_set_gui_maximize( window_get_width()/1270, window_get_height()/720 );
    }
    
    // moje draw GUI:
    draw_set_halign(fa_center);
    draw_text( window_get_width()/2, 20, "Pause");

    Wystarczyło za pomocą show_debug_message wyrzucić sobie co zwraca window_get_width() .

  6. Nie wiem co mam odpowiedzieć, bo to nie są screeny z gry. Widać, że fonty mają ten sam rozmiar, wiec nie wiem co się dzieje w Twojej grze. Zalecam wypisanie sobie na ekranie wszelkich wartości i sprawdzenie, czy faktycznie są dobre proporcje (dlaczego w ogóle 720 i 360?).

     

    Dla pewności, jako 3 i 4 argument w display_set_gui_maximize możesz podać 0,0, żeby się offset nie robił - co oczywiście jest w dokumentacji.

     

    Wciaż też twierdzisz, że tryb okna i pełnego ekranu maja tę samą rozdzielczość co nie jest możliwe :)

  7. Przede wszystkim wywal display_set_gui_size z tego fragmentu powyżej, bo tym zmieniasz rozmiar gui na jakiś inny, więc może i się wtedy rysuje inaczej. Poza tym, jeśli uzależniasz pozycję od rozmiaru okna czy view, to na pełnym ekranie i w okienku one są różne. Np. rysowanie napisu pauza na środku ja bym zrobił tak:

    draw_set_halign(fa_center);
    
    draw_text(display_get_gui_width()/2, 50, "Pauza");

    Wtedy zawsze będzie na środku.

  8. Zmieniasz display_set_gui_size na view_wport[0],view_hport[0], które nie muszą być równe ani rozmiarowi okna, ani ekranu i jeszcze mogą być różne na pełnym ekranie i na okienkowym, więc nie mam pojęcia co się dzieje w Twojej grze :) Generalnie zalecałbym tego nie zmieniać, skoro wcześniej ustaliliśmy, że tylko w create to ląduje, a teraz nagle zmieniasz warunki.

    Proponuję wyświetlić sobie te wartości na ekranie:

     

    draw_text(10,10, string(view_wport[0]) + ", " + string(view_hport[0]));

    I wtedy się dowiesz co się dzieje i jakie są różnice.

     

    A co do czytania manuala... całego nie musisz czytać, ale ja po wejściu w opis dowolnej funkcji staram sie przeczytać wszystkie o podobnej nazwie w tym samym dziale (albo i sam wstęp do działu), co pomaga zrozumieć wiele podstaw i zależności. Bez przeliczenia co obecnie masz i co ma kiedy jaki rozmiar - niewiele zrozumiesz, musisz trochę prostej matematyki (głównie dzielenia i mnożenia) odbębnić.

  9. Czyli nie przeczytałeś dokumentacji, tak jak sądziłem :gnysek:Masz dwa różne tryby ekranu, wiec musisz odpowiednio do niego używać innego kodu skalowania GUI, stąd problem.

    Żeby nie ustawiać tego co krok, wystarczy sprawdzać, czy właśnie się nie zmienił tryb ekranu i go zapamiętywać.

     

    // create
    display_set_gui_size(1280, 720)
    full_screen = -1;
    
    
    // step
    if (full_screen != window_get_fullscreen()) {
    full_screen = window_get_fullscreen();
    	if (full_screen) {
    		display_set_gui_maximize( 1, 1 );
    	} else {
    		display_set_gui_maximize( 720/window_get_width(), 360/window_get_height() );
    	}
    }

    Oczywiście przy innych monitorach niż Twój, zamiast 1,1 będzie dzielenie przez display_get_width() i ..._height() .

  10. No dobrze, a podstawiłeś sobie cyferki pod dzielenie i sprawdziłeś wynik? Wtedy byś wiedział, skąd błąd. Bardzo możliwe, że podałem na odwrót kolejność, bo nie wiem czemu, założyłem, że podajemy ile razy pomniejszyć GUI, a przecież dla mniejszego okna musi być < 1. Możliwe też, że window_get_width() na pełnym ekranie zwraca wartość okienka niepełnego, chociaż byłoby to dziwne - no ale to już musiałbyś sobie na ekran/w output wrzucić ten wynik, dla pewności.

     

    Zatem, na pełnym ekranie:

    display_set_gui_maximize( 1, 1 );

    a w oknie:

    display_set_gui_maximize( 720/window_get_width(), 360/window_get_height() );
  11. Godzinę temu, pankracy napisał:

    nim nie skalują się do rozmiaru okna..tylko nadal mają pierwotny rozmiar..

    No tak, GUI nadal będzie mieć 1280x720, tak jak w momencie startu gry - jeśli nie podasz inaczej w kodzie. Jeśli chcesz przeskalować, to musisz zrobić tak:

     

    // create:

    display_set_gui_size(1280, 720); // wymuś zawsze taki rozmiar na każdym monitorze

     

    // skalowanie - przy zmianie ekranu (nie trzeba co krok)

    display_set_gui_maximize( 1280/window_get_width(), 720/window_get_height() );

     

    Reszta kodu którą tutaj podajesz nie ma związku z problemem.

  12. 22 minuty temu, pankracy napisał:

    A jak to dokładnie obliczyć? mam ustawić tutaj również połowę rozdzielczości obrazu??Pytam,bo nie używałem jeszcze tej funkcji..

    To zależy jakie masz rozdzielczości.

     

    Jak masz grę 800x600, a fullscreen jest na 1920/1080, to skalowanie wynosi zapewne poziomo 1920/800 i 600/1080 w pionie. Możesz oczywiscie wpisać od razu wynik działania, ale tutaj przynajmniej wiesz o co chodzi o możesz podstawić funkcję display_get_width() albo ..._height() i ustawić do dowolnego monitora.

  13. użyj display_set_gui_maximize(), aby ustalić o ile skalować GUI. Zmiana rozmiaru działa jak zmiana szerokości surface - z prawej i na dole po prostu obcinasz obszar rysowania, więc na pełnym ekranie raczej musisz skalować. Ta funkcja pozwala też użyć offsetu dla ekranów dziwnych/innych szerokości.

  14. Jedyne co mi wpadło do głowy, to zrobić zapytanie które zwraca co drugi rekord i wtedy union select z zapytaniem przeciwnym.

    Ewentualnie zapytanie do którego doklejasz numer rzędu (nie id) i robisz jakiś concat zależnie od modulo i potem z tego kolejny select i posortować po tym concat. Ale ogólnie to będzie wolne, tak czy siak.

  15. 13 godzin temu, klucz żurawi napisał:

    Ale w moim daw, te pocięte kawałki były odtwarzane bez zakłóceń.

    Jak wrzucam kilkanaście plików WAV w Media Playera, to nie dośc, że pierdzi to jeszcze je nieco obcina. To wina programu, a większość silników gier poradzi sobie bez problemu bez trzasków. Ja w GameMakerze używam czasem testowo gotowych mp3 z neta nawet słabej jakości i się ładnie zapętla.

  16. Bo WMP jest słabe :P pyknięcia wynikaja chyba z inicjalizacji karty. Powinno być bez ciszy, zresztą w edytorze do dźwięku, nawet audacity można ewentualnie na bardzo dużym zoomie zrobić fade-in i fade-out na ułamkowej części początku/końca utworu i na pewno nie będzie trzaśnięć.

    Kolejny jednak raz - to znów indywidualna rzecz do dogadania z danym twórcą gry :)

  17. 10 godzin temu, LolikZabójca napisał:

    Db::getInstance()->executeS()

     Zrobiłem to za Ciebie i wszedłem w manual, i chociaż nie znam Presty, czytam:

    It should only be used for 'read' queries

    Zatem spróbuj samego execute() :)

     

    https://doc.prestashop.com/pages/viewpage.action?pageId=51184692#BestPracticesoftheDbClass--executeS()

    https://doc.prestashop.com/pages/viewpage.action?pageId=51184692#BestPracticesoftheDbClass--execute()

  18. Nie, ja po prostu z niejednego pieca jadłem chleb i dawno przestałem narzekać na wiele rzeczy. Prawda jest taka, że jak dobrze popracujesz z jakimś programem, to zawsze się okazuje, że ma milion błędów i dwa miliony brakujących funkcji. A jak znajdziesz drugi, lepszy, to po czasie jednak brakuje mu czegoś, co miał ten pierwszy, albo robi to gorzej. No tak już jest, więc nie ma sensu wyolbrzymiać problemów jednej firmy, zwłaszcza, że osoba która ma doświadczenie potrafi większość problemów obejść, lub może nawet rozumie, że to wcale nie problem, tylko tok rozumowania nie ten.

×
×
  • Dodaj nową pozycję...