Skocz do zawartości

Dawidds

Użytkownicy
  • Postów

    1 970
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Dawidds

  1. Dawidds

    Logika

    Ty wykonaj trzy takie testy w różnych Mensach i zobaczymy, czy wyniki będą takie same... ; ) Chodzi mi o to, że niby 100 jest średnią, czy coś. http://pl.wikipedia.org/wiki/Plik:IQ_curve.svg
  2. Co 8, 10, 15...? Zapytaj gnyska ile razy wysyła w Almorze, ja stawiam na 10.
  3. Dawidds

    Logika

    Ekhm, ten test jest jakiś taki trochę niewiarygodny - wszyscy tutaj mieli >120, nawet chodząca do czwartej klasy siostra shockera miała 118 bodajże. Ja miałem 130, ale mam wrażenie że myśląc nad każdym więcej niż te 10-15 sekund można spokojnie zrobić 80% tego pewnie :3
  4. Tytuł: WarFog Autor: Wojzax https://forum.gmclan.org/index.php?showtopic=19561
  5. A moje to co : ( ? Podałem całego ponga z ai (i troszku lepszym niż te wymienione) i multi.
  6. Dawidds

    Lincoran

    Domyślnie w ogóle wywal blooma. I co to za zielone plamy w prawej części screena O.o ?
  7. Easeful, to zależy o jakim ai mówimy, bo do ponga funkcje matematyczne z wyższej półki raczej nie są potrzebne, mocne logiczne myślenie raczej też nie. A ten temat jest właśnie o pongu, gdzie najprostsze ai ogranicza się do dwóch linii. Więc ten ktoś kogo zacytowałeś miał rację.
  8. Takie troszkę bardziej rozwinięte: https://forum.gmclan.org/index.php?showtopic=16769
  9. Dawidds

    Tura #72

    Napisz w cpp i wszystko będzie ok.
  10. To z tego korzystałem, i wątek na największym (nie realtime tylko o 1 niższy) priorytecie wyrabiał mi niecałe 90 fps. Ale nie kojarzę ile wyrabiało na gmowym czasie, więc może to nie wina dlla była ;p
  11. Jak próbowałem robić coś takiego na wątkach na gmthreads zwróciłem uwagę na te nieregularne pomiary czasu, to je zastąpiłem dllem i działało ładnie, tyle, że wątek z kodem wyrabiał 88 fps bodajże :P Ale to raczej wina użytego dlla była.
  12. gf gtx 285, psp, nokie n900 i kasę ;p Żarcik. Pieniądze, słodycze i jakąś bidną książkę.
  13. current_time na takie coś i tak za mało precyzyjny ;p A że gm krzywo (no, nieregularnie) wskazuje czas to inna sprawa.
  14. No widzisz, nie bardzo jak miał o tym pomyśleć, bo prostszego rozwiązania nie ma, a gm miał być maksymalnie prosty :P No ewentualnie mógłby dać możliwość rozdzielenie stepów i drawów na osobne wątki gdzie step miałby większy priorytet priorytet, ale to też mogło by w końcu zmulić.
  15. Łatwiejszego? Ciężko Ci podmienić wszystkie x na dt(x) :P ? Człowieku, lepiej nie zaczynaj się uczyć "normalnego" języka w takim razie ;d
  16. Z tym najmniejszą rzecz zmieniać to nie przesadzaj, ja endurenca przepisałem pod to w efektywnie dwie godziny (nad pociskami się męczyłem 80% tego czasu, lol). W sumie to dodać "dt(" przed i ")" po każdej wartości to nie jakiś super problem. Chociaż to zależy o chcesz przerobić w sumie. A najlepiej to od początku na tym pisać, to nie będzie trzeba nic zmieniać ;d
  17. Skorzystać z dlla do dźwięków ;p
  18. Nie chce mi się testować teraz, ale i tak stawiam, że jest szybsze - gdyby to działało tak samo jak ini to wiadomo, że gmowe by wygrało, ale ini jest takim klocem, że to jest możliwe. No i zwróć też uwagę, że tutaj nie zapisuje się ręcznie, raz, a w ini każda zmiana klucza to od razu zapis pliku. Tzn. chyba, dawno z ini nie korzystałem ;p
  19. WSTĘP Nie drażniło Cię nigdy, że gdy Twoja gra spadnie poniżej 60 fps to automatycznie cała akcja dzieje się wolniej? Przecież w inne (nie gmowe raczej ;p) gry można spokojnie grać na mniejszym fpsie. Albo dobra, nie będzie ładnego wstępu. Po przeczytaniu tego tekstu powinieneś bez problemu oprzeć swoją grę o taki właśnie zmienny framerate - deltatime (delta to różnica (wymaga zweryfikowania ;p)) :) Więc zaczynajmy. MECHANIZM DZIAŁANIA Najpierw pomyślmy, jak to powinno działać. Im mniej fps wyrabia gra, tym wszystko powinno się dziać szybciej. Nie skorzystamy jednak z licznika fps (było by to za mało dokładne, na dodatek gm pokazuje taki, eee, specyficzny fps - nie taki jaki pokaże nam Fraps), a, jak już się pewnie domyśliłeś po nazwie, z różnicy czasu pomiędzy klatkami. Brzmi strasznie :D ? Po prostu będziemy liczyli czas, jaki upłynął pomiędzy dwoma klatkami, i na jego podstawie będziemy zmieniali prędkości wszystkich obiektów w grze. KOD Utwórz sobie obiekt, umieść go w roomie, i nazwij go jak Ci się podoba, powiedzmy obj_deltatime, wstaw do niego taki kod: GML //Create global._dt = 1/60; //W tej zmiennej globalnej bedziemy przechowywali roznice pomiedzy klatkami (w sekundach - czyli dla 60 klatek // uzyskmy watosc 0.016, i taka tez ustawiamy "na start") global._dt1 = date_current_time(); // Ta zmienna oznacza czas (normalny czas, pobrany przez date_current_time()) poprzedniej klatki global._dt2 = date_current_time(); // A ta aktualnej //Begin Step global._dt2 = date_current_time()*100000; // Ustawiamy zmienna _dt2 na aktualny czas (mnozymy przez 100000 aby uzyskac wynik w sekundach) global._dt = global._dt2-global._dt1; // Obliczamy roznice pomiedzy tymi wartosciami - odejmujemy czas z poprzedniej klatki od aktualnego czasu global._dt1 = global._dt2; // Ustawiamy aktualny czas jako ten z poprzedniej klatki</span></span></span></span></span> Jak widać, kod jest stosunkowo prosty, chyba nikt nie powinien mieć problemów z jego zrozumieniem. UŻYCIE Dobrze, mamy obliczoną różnicę w czasie pomiędzy klatkami, co dalej. Wyobraźmy sobie to. Mamy sobie platformówkę, w której gracz przy fpsie 60 powinien poruszać się z prędkością 1px/klatkę. Jak nietrudno się domyślić, przy 30 fpsach natomiast będzie przemieszczał się 2px/klatkę. Ale my nie dysponujemy fpsem, a różnicą czasu pomiędzy klatkami. Więc przebudujmy poprzedni przykład. 60 fps - 0.016ms - 1px/s 30 fps - 0.032ms - 2px/s 15 fps - 0.064ms - 4px/s Jak nietrudno zauważyć, prędkość gracza rośnie proporcjonalnie do różnicy czasu (różnica czasu zwiększa się dwa razy - prędkość gracza zwiększa się dwa razy). A więc uniwersalny wzór na prędkość gracza wygląda o tak: prędkość [px/kl] = prędkość [px/s] * global._dt; Ludek z naszego przykładu ma więc w Stepie kod: GML speed = 60 * global._dt; FUNKCJA Co by sobie wszystko maksymalnie ułatwić (aby nie dodawać do wszystkiego *global._dt) napiszemy sobie funkcję, która będzie po prostu mnożyła podaną w argumencie liczbę przez deltatime. Nazwijmy ją jakoś prosto - np. dt(). GML return argument0 * global._dt; Ruch gracza z poprzedniego przykładu będzie więc wyglądał tak: GML speed = dt(60); //60 to przypominam predkosc wyrazona w pikselach na sekunde</span></span></span></span></span> Teraz pora na omówienie różnych przykładowych ruchów. 1. STAŁA PRĘDKOŚĆ RUCHU Ten przykład już omówiliśmy, pokażę więc sam kod: GML speed = dt(prędkość w pikselach na sekundę); 2. RUCH Z OPÓŹNIENIEM (FRICTION) To nie będzie wiele bardziej skomplikowane od poprzedniego ruchu - pamiętajcie, aby wszystko, co ma jakiś związek z czasem wpakować w funkcję dt(). Do tego typu ruchu warto także używać już własnej zmiennej odpowiedzialnej za prędkość - nazwijmy ją spd. Będzie ona robiła dokładnie to samo, co gmowe speed, tyle, że będzie przechowywała prędkość wyrażoną w pikselach na sekundę. Wersja 1. GML if(keyboard_check(vk_right)) { spd += dt(100); } else { spd -= dt(100); if(spd<0){ spd=0; } } x += dt(spd); Wersja 2. (obie robią to samo, użyj tej, której będzie Ci wygodniej) GML if(keyboard_check(vk_right)) { speed += dt(20); } friction = dt(10); Jak widać, nic ciężkiego ;p 3. ALARMY Powiedzmy, że chcemy, aby co półtora sekundy wykonywała się jakaś akcja. Użycie gmowych alarmów oczywiście wchodzi w grę - musimy napisać własne. GML //Create timer = 1.5; //Czas do wykonania sie alarmu w sekudach //Step if(timer <= 0) { //akcja timer += 1.5 } else { timer -= dt(1); } Podobny (albo raczej identyczny) kod należy zastosować np. przy strzelaniu. To tyle z ruchów, teraz inna możliwość, którą daje nam użycie deltatime'u. A mianowicie... BULLET-TIME Gdy wszystkie prędkości oparliśmy o jedną funkcję, aż grzech nie dodać do tego możliwości spowolnienia akcji gry - o tak, dla zabawy. Do create obj_deltatime dodajemy: GML global.gamespeed = 1; //to jest wlasnie nasza predkosc gry - 1 to dnormalna wartosc, jesli chcemy spowolnic gre 5 razy ustawiamy ja na 0.2</span></span> Zadeklarowaliśmy jedną zmienną, która będzie odpowiadała za prędkość gry. funkcja dt(): GML return argument0 * global._dt * global.gamespeed; Prosty bullet-time do tego to chociażby: GML if(keyboard_check(vk_space)) { global.gamespeed = 0.15; } else { global.gamespeed = 1; } No i było by na tyle. DOWNLOAD Gotowy do zmerge'owania plik gmk Ed: Naprawione, tagi gml się zrypały.
  20. Takie trochę bardziej rozwinięte drzewo binarne, no i przykład obejścia gmowej zepsutej rekurencji instancjami :P DOWNLOAD GMK GMK - mirror EXE SCREENY CLICK UWAGI Nie ma :)
  21. A jeśli chcesz mieć origina y gdzie indziej niż środek obiektu, to wystarczy proste GML depth = -y +/- iles; Warto też zwrócić uwagę na zajmowaną "przestrzeń" deptha przez obiekty - abyś nie zaliczył wtopy, że kursor/hud/trawka będzie widoczna nad/pod jakimś domkiem, zwłaszcza na dużych mapach, lepiej zastosować takie coś: GML depth = -600 -( y - (view_yview[view_current] - 500) ), i wtedy depth od -100 do powiedzmy -2000 zostawiasz w spokoju.
  22. Przykład albo raczej endżajn obsługi plików, takie prostsze alastyczniejsze ini. DOWNLOAD v0.999 Mój upek GMCLAN uploader UWAGI Plik po wczytaniu jest zwykłą ds_listą (zwracany uchwyt jest uchwytem do listy) w formie klucz=wartosc klucz=wartosc , co daje większą swobodę zarządzania tym. W przeciwieństwie do ini, można otwierać pliki w katalogach. Stawiam, że jest szybszy niż ini. Szyfrowanie to bardziej przykład niż element endżajnu - w praktyce lepiej zamiast zamiast odkodowywać plik odkodowywać go od razu do pamięci - no ale kod napisałem bardziej niż to było trzeba przejrzyście, więc jak komuś zależy na większym bezpieczeństwie to już sobie przerobi funkcje odczytu. Praktycznie tego nie testowałem, ale raczej nie powinno zawierać bugów =) Więcej pisać nie będę, funkcje są opisane. Creditsów nie wymagam, ale jak ktoś chce być uczciwy to się nie obrażę :)
  23. Dawidds

    Moderacja

    Opanujcie sie troche z tymi listami.Najpierw ranmus ma blackliste userow, potem poxipol mowi ze ma cos na wiekszosc redakcji, wspominajac przy okazji o liscie ziutta, a na koniec okazuje sie, ze i platyna, kurde najbardziej kompetentny moderator tutaj moim skromnym zdaniem, ma swoja "liste". Jak skoncze pisac ten post to okaze sie, ze borek ma blackliste userow, a jeszcze jakis user nastepny komplet hakow na redakje.
  24. Dawidds

    Moderacja

    Jego licencja wygasla.
×
×
  • Dodaj nową pozycję...