Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Akademia GMCLANu
Kategorie bazy plików
Pliki -> Game Maker -> Przykłady
Informacje o pliku: Przyszła pozycja gracza
Przykład pokazuje jak obliczyć przyszłą pozycję gracza na podstawie jego kierunku i prędkości. Przydatne jest to w grach typu Tower Defence, strategiach, TDS'ach.
rozmiar: 13 KB | autor: Uzjel
pobrań: 7438 | głosów: 12 | ocena: 7.33 oceń zasób
data dodania: 23.09.10 | dodał: Tymon
Komentarze
stron: 1

1


av

Makary155 (17:06, 24.09.2010)

Świetne! Wreszcie moi łucznicy będą trafiać w ruchomy cel

av

Dawidds (18:21, 24.09.2010)

Idea przykładu fajna, ale jednak zastosowany mechanizm sprawia że przy stałym ruchu gracza kościotrup nie zawsze trafia (chociaż i tak w większości trafia, a w tdsach nie ma co się z tym bawić bo i tak gracz będzie robił uniki) w cel. Nie mam pomysłu jak to wyjaśnić to daję obrazek:
img832.imagesha...64/fgfdgdfg.png

I teraz po kolei kroki, które wykona algorytm w tym przykładzie (czarne to kościotrup, niebieskie jabłko):
1. Sprawdzamy, w ilu klatkach strzała doleci do AKTUALNEJ pozycji gracza. Wynik - 4 klatki (taki przykład ofc). Czerwona linia na obrazku.
2. Obliczamy, na jakiej pozycji będzie gracz za tyle klatek, ile wyszło na wyżej. Niebieska linia na obrazku, ta pozycja gracza, która nam wyszła jest oznaczona jako puste niebieskie kółko.
3. Strzelamy w to puste niebieskie kółko. Zielona linia na obrazku.
//tutaj koniec algorytmu, ale obserwujmy dalszy przebieg zdarzeń
4. Niestety, wyszło tak, że strzale dojście do pozycji którą wyliczyliśmy zajęło 6 klatek (sprawdzaliśmy to w 1 punkcie, wtedy innymi danymi nie dysponowaliśmy), a nie 4. I przez te 6 klatek gracz zdążył ominąć trajektorię - różowe kółko.

Obliczanie pozycji, na której będzie gracz w momencie gdy trafi go strzała nie opiera się na dystansie do rzeczywiście tego punktu, gdzie trafi go strzała (choć szczerze sam nie mam pojęcia jakby to obliczyć, mógłby się wypowiedzieć jakiś ekspert : D), a na dystansie do gracza. A nas interesuje PRZYSZŁA pozycja gracza i to na niej powinniśmy oprzeć obliczenia - a nie na aktualnej.
Opieramy się na czerwonej kresce, a powinniśmy na zielonej.

Inna sprawa, że wychodzi na to, że aby obliczyć przyszłą pozycję gracza potrzebujemy pozycji gracza. Dlatego to takie ciekawe : D

av

Tymon (18:25, 24.09.2010)

Ale Ty uwzględniasz ruch przyspieszony którego nie ma w tym przykładzie.

av

Dawidds (18:25, 24.09.2010)

Nie chce mi się myśleć dokładnie jaki by to miało sens, ale logiczne wydawało by się zrobienie po prostu powiedzmy 5 iteracji - z których każda opierała by się na wyniku poprzedniej.
Czyli że rysunek który wyżej dałem to 1 iteracja - w drugiej program liczy, gdzie będzie gracz za 6 klatek (długość zielonej kreski, tą, którą właśnie obliczyliśmy). I wtedy przekazujemy do następnej iteracji, aby obliczyła, gdzie będzie gracz za (tutaj wynik tej 2 iteracji) klatek.

Całkowicie precyzyjne by to nie było, ale było by to już dużo większe przybliżenie.

av

Tymon (18:27, 24.09.2010)

Stary, komplikujesz sobie życie. Do podręcznika fizyki, marsz.

av

Dawidds (18:37, 24.09.2010)

Nie, nie uwzględniam przyspieszonego : D

Obliczamy, gdzie będzie gracz, gdy trafi go strzała - ale opieramy to na AKTUALNEJ sytuacji (aktualnym dystansie kościotrup-gracz, co przekłada się na wynik "w ilu klatkach strzała dotrze do celu", a nie na tej przyszłej. Nie mam pojęcia jak to lepiej wyjaśnić, także muszę liczyć, że kogoś oświeci i zrozumie, o co mi chodzi

Tyle tylko że mówię, do gier to w 100% wystarcza - ale tak czysto teoretycznie patrząc to ten przykład nie jest całkiem skuteczny

Zresztą najlepiej zwiększyć sobie ekran i się zauważy, że rzeczywiście gdy poruszamy się tak, że szybko zmienia się dystans jabłko-kościotrup (mijamy go w odległości gdzieś 150px) to szkielet w nas po prostu nie trafia (mimo, że nie zmieniamy kierunku ani prędkości).

av

Dawidds (18:38, 24.09.2010)

Chyba inne podręczniki od fizyki mamy

av

Tymon (18:46, 24.09.2010)

Dobra, już to widzę.

W alarmie szkielecika trzeba poprawić liczenie dist.

dist = point_distance(
x,
y,
obj_apple.x + lengthdir_x( obj_apple.apple_speed, obj_apple.apple_direction ),
obj_apple.y + lengthdir_y( obj_apple.apple_speed, obj_apple.apple_direction )
);

Zwykły błąd, bo w końcu ma strzelać w kierunku przyszłej pozycji jabłka, a nie obecnej.

Dawidds i tak masz pałę za sposób rozwiązania problemu.

av

Uzjel (20:01, 24.09.2010)

Napiszmy o tym pracę magisterską i chodźmy na piwo. Dla mnie tamto rozwiązanie jest wystarczające, bo snajper nie jest potrzebny

av

pablo1517 (16:45, 29.11.2010)

Dawidds, to nie wystarczy brać sobie odległości kosciotrup - przyszła pozycja gracza, zamiast kosciotrup - gracz? Wtedy masz wszystko policzone bezbłędnie, tak na chłopski rozum, bo z fizyki to ja same 2 mam :/

av

Dawidds (17:47, 29.11.2010)

Się obudziłeś : D
No ale jak już mamy się czepiać to na chłopski rozum wychodząc od tego co napisałeś:

1. Chcemy obliczyć [odległość kościotrup - przyszła pozycja gracza], potrzebujemy do tego ofc:
-pozycja kościotrupa (mamy)
-przyszła pozycja gracza (nie mamy, liczymy)
2. Do obliczenia [przyszła pozycja gracza] potrzebujemy:
-kierunku gracza (mamy)
-jego prędkości (mamy)
-czasu, jaki zajmie pociskowi dotarcie do tej [przyszłej pozycji gracza] - (nie mamy, liczymy)
3. Do obliczenia [czasu jaki zajmie pociskowi dotarcie do tej [przyszłej pozycji]] potrzebujemy:
-prędkości pocisku (mamy)
-dystansu jaki musi przebyć pocisk, czyli właśnie [odległość kościotrup - przyszła pozycja gracza] - no jak nieciężko zauważyć, zapętliliśmy się.

Myślę że trochę lepszy sposób na pokazanie tego niż to co pisałem ostatnio, ale i tak gadanie nad tym jest czystą głupotą bo w 95% przypadków pocisk mimo drobnej nie-precyzji (tak, wiem, słowotwórstwo - you're doing it wrong) trafi gracza, a w pozostałych 5% gracz zrobi unik i tyle ze snajperskich zdolności szkieletu, więc naprawdę nie ma o czym gadać. Czysto matematycznie technika jest nieprecyzyjna, ale w kontekście gier i tak w 100% wystarczająca.

I end of topic, bo nie dam rady tego lepiej wytłumaczyć a na pisanie aplikacji która to zademonstruje jestem zbyt leniwy.

stron: 1

1



Dodaj komentarz:
Treść:
W bazie mamy plików: 215
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
6 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 6, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
Konrad-GM (23:09, 19.06.19):
Internet głównie, pisałem jakiś swój silnik w OpenGL + C++ ucząc się z learnopengl.com i tak podstawy shaderów podłapałem
I am Lord (22:41, 19.06.19):
Konrad mistrzu shaderów z jakich źródeł się uczyłeś?
Korodzik (21:35, 19.06.19):
W sumie to czemu od ponad pół roku temat dyzmka o Seidzie wisi na górze forum?
SimianVirus7 (18:53, 19.06.19):
chwilę pokombinowałem ale shadery to nie moja bajka
Konrad-GM (12:40, 19.06.19):
docs.yoyogames....ders/index.html Tutaj masz ładnie to opisane w pierwszych akapitach
Konrad-GM (12:39, 19.06.19):
Trochę pokiełbasiłem z tym mnożeniem, ale ostatecznie coś takiego powinno być - pastebin.com/6jjunh5g Tak, ten parametr zmieniasz przez uniformy właśnie.
SimianVirus7 (12:36, 19.06.19):
Prosto i na temat, to lubie a powiedz mi jeszcze, czy shadery mogę zmieniać dynamicznie, znaczy, że zrobie uniwersalny, a parametry będę zmieniał w kodzie jakiegoś obiektu
Konrad-GM (12:24, 19.06.19):
A i tam dałem mnożenie, zamiast mnożenia możesz dać + to wtedy czarny kolor też powinno Ci się rozjaśnić, sorry
Konrad-GM (12:20, 19.06.19):
Oczywiście nie chcesz mieszać się do wartości kanału Alpha, więc możesz coś takiego zrobić: gl_FragColor = (tutaj standardowy kod) * vec4(vec3(1.0 + uRozjasnienie), 1.0); gdzie uRozjasnienie to uniform float uRozjasnienie;
Konrad-GM (12:15, 19.06.19):
Wiesz co, standardowy shader po stworzeniu nowego, to jak chcesz coś rozjaśnić to jest to niezmiernie proste. We fragment shaderze masz wyjście gl_FragColor to wystarczy, że dodasz mnożenie przez wartość rozjaśnienia
SimianVirus7 (12:13, 19.06.19):
jest to jakaś opcja, ale najpierw musiałbym się ich nauczyć
Konrad-GM (10:33, 19.06.19):
A może shader?
gnysek (10:31, 19.06.19):
chyba nie
SimianVirus7 (9:13, 19.06.19):
czy w gm:s2 można jakoś rozjaśnić sprite'a? w gm:s w zakładce effects było ich multum, a w gm:s2 jest tylko grayscale i blur. Jakiś plugin?
gnysek (23:35, 16.06.19):
Wiem.
Konrad-GM (23:25, 16.06.19):
Przez to emaile trafiają do spamu z miejsca
gnysek (23:11, 16.06.19):
Bo Ranma wciąż mi nie dał dostępu do domeny żebym ja normalnie mógł konfigurować.
Konrad-GM (14:43, 16.06.19):
Dlaczego emaile z gmclan przychodzą po domenie gmclan.ovh i to bez szyfrowania? :o
SimianVirus7 (14:25, 16.06.19):
Zastanawiałem się, dlaczego gra schodzi do 5fpsów przy prawie pustym roomie, a tu się okazało, że mam 50 000 obiektów
gnysek (18:59, 14.06.19):
thx
SimianVirus7 (16:19, 14.06.19):
Właśnie zdałem sobie sprawę, że kupiłem przykład z marketu, którego twórcą jest Gnysek
Flashek (14:09, 14.06.19):
takie cos w podstawowce robilismy
gnysek (14:42, 13.06.19):
Myślę, że to było na podstawie kodu oryginalnego manuala
Ranmus (13:49, 13.06.19):
Mimo wszystko dokumentacja gnyskowa dokumentacja widzę, że do GM8, który miał premierę ~2010 roku, gdzie już od dawna się nie używało tabel do layout.
Ranmus (13:45, 13.06.19):
Tak samo ktoś teraz może napisać jaki jest sens używać flexboxa zamiast grida.
Ranmus (13:43, 13.06.19):
Taki był sens, że kilkanaście lat temu nie było html5, css3 czy nawet xhtml i tylko poprzez tabelki dało się wymusić ten sam układ na wielu przeglądarkach. Kiedyś divy nie dzialały tak jak teraz lub ich nie było.
gnysek (22:27, 11.06.19):
10-12 lat temu była taka moda.
Konrad-GM (16:59, 11.06.19):
Oczywiście poza tworzeniem layoutu z tabel
Konrad-GM (16:57, 11.06.19):
Pewnie era xhtml. Chociaż dzisiaj też używa się tagów table, bo semantyka :v
Wojo (16:50, 11.06.19):
tfu <table>
Wojo (16:50, 11.06.19):
Jaki był sens użycia <tr> zamiast <div> ? Z góry zaznaczam, że się na tym za bardzo nie znam
gnysek (21:06, 10.06.19):
O matko, jaką starą stronę znalazłem na moim serwerze, jak projektowałem jak ma wyglądać gmclanowa dokumentacja... gnysek.pl/gm8.doku/index.html
szpaq99 (15:18, 10.06.19):
I tak doszczętnie zniszczyłeś konkurencję, głosy są jednogłośne
SimianVirus7 (7:24, 10.06.19):
aaa, zapomniałem xD i faktycznie jak się nie ma ruchu to też zapomniałem o jakieś akcji
Korodzik (23:11, 9.06.19):
SimianVirus7, twoja gra się wiesza jak się zremisuje
SimianVirus7 (15:08, 9.06.19):
o, rzeczywiście, dzięki
Adriann (14:50, 9.06.19):
Zdaje się że można konwertować jak klikniesz prawym przyciskiem myszy na kod i wybierzesz opcję
SimianVirus7 (12:53, 9.06.19):
Hm, zawsze klikałem, żeby projekt był w trybie GML, a teraz wybrałem Drag&Drop i w sumie tam jest taka możliwość
SimianVirus7 (12:49, 9.06.19):
Mam pytanie. Czy w gms2 można włączyć to drzewko z akcjami do danego eventu, tak jak to było w gms1. gmclan.org/uplo...2___pytanie.png
gnysek (11:48, 9.06.19):
Czasem można wygrać przez samo zgłoszenie, bo jest jedna osoba A jak mniej niż trzy gry to i tak punktujesz
SimianVirus7 (8:12, 9.06.19):
Za długo na nią czekałem żeby odpuścić
gnysek (0:47, 9.06.19):
Czemu? Nie trzeba na każdą ligę robić gry,
SimianVirus7 (0:08, 9.06.19):
No i tak nie zdążył bym zrobić czegoś od podstaw wracam w niedzielę wieczorem także najwyżej będę zdyskwalifikowany
gnysek (9:57, 8.06.19):
To jest przykład. Ktoś musi po prostu wygrać
SimianVirus7 (22:16, 7.06.19):
oj, teraz przeczytałem zaktualizowany opis tury :V czyli nie wystarczy samo zmniejszanie się planszy? musi być tylko jeden gracz na mapie, żeby wygrać?
gnysek (21:19, 7.06.19):
btw. nikt nie mówi, że to musi być tradycyjne kółko i krzyżyk. Możesz chodzić kółkiem i walczyć z krzyżykiem
SimianVirus7 (20:33, 7.06.19):
półtora godziny mineło, a ja wciąż myślę nad mechaniką gry ._.
gnysek (22:24, 6.06.19):
Naprawione
gnysek (22:17, 6.06.19):
Zerkam właśnie, może to jednak moja nadgorliwość ostatnio, jak trochę poprawiałem SEO gmclanowe, które jest straszne.
szpaq99 (20:36, 6.06.19):
Dokładnie tak naprawdę to nie był błąd ] tylko jesteście w Truman Show
Ankieta
» Ile powinny trwać tury Ligi 24?
24h
48h
54h (piątek od 18:00)
7 dni
inna długość (podałem w komentarzu ankiety)

GMCLAN to serwis o programie Game Maker i nie tylko.
[ Polityka prywatności ]
Copyright © 2002-2019. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!
© 2002-2017 Ranmus (ranmus.pl), © 2017-2019 {=|=} fable_inside();

[ Czas generowania strony: 0.03372 sekund ] [ Liczba zapytań MySQL: 14 ]