Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Cześć wszystkim. Zastanawiam się jak podejść do problemu, w którym przeciwnicy przewidują pozycje gracza na podstawie jego ruchu w grze topdown.


Założenia:

- brak grawitacji - pociski znikają dopiero za ekranem

- ruch gracza ma stałą wartość bez przyśpieszenia. Takie same właściwości mają pociski wystrzelone z działka

- wieżyczki mogą robić błyskawiczny obrót, jeżeli to uprości kod

 

Zdaję sobie sprawę, że to może być całkiem złożony kod, dlatego proszę o wytłumaczenie jak się za to zabrać. O jakich zagadnieniach fizycznych/matematycznych poczytać. Może już kiedyś coś takiego implementowaliście i możecie mnie jakoś pokierować.

PS: To mój pierwszy post tutaj. Bardzo fajnie, że jest polskie community game makera. Używam go od kiedy stał się darmowy do niekomercyjnego użytku. Wcześniej tworzyłem tylko proste gry konsolowe.

 

  • Administratorzy
Opublikowano

Pozycja w następnej klatce jest generalnie prosta:

 

nx = lengthdir_x(predkosc_gracza, kierunek_gracza);
ny = lengthdir_y(predkosc_gracza, kierunek_gracza);

 

Natomiast pozycję "k" klatek do przodu, zakładając stałą prędkość gracza i brak zmiany kierunku, znajdujemy, mnożąc prędkość_gracza przez "k".

Opublikowano

Chciałem podrzucić przykład, który sam zrobiłem prawie 14 lat temu :D Ale coś się nam z pobieraniem zepsuło, no i nie wiem czy @gnysek konwertował na nową wersję GMa. W każdym razie tak jak gnysek napisał + przeliczenie za ile klatek doleci pocisk do przeciwnika w danej pozycji. Nie jest to oczywiście 100% gwarancja celności, bo obiekt może zmienić kierunek, ale jest to jakiś punkt wyjścia. 

  • 2 tygodnie później...
Opublikowano
W dniu 8.01.2024 o 10:01, gnysek napisał(a):

Pozycja w następnej klatce jest generalnie prosta:

 

nx = lengthdir_x(predkosc_gracza, kierunek_gracza);
ny = lengthdir_y(predkosc_gracza, kierunek_gracza);

 

Natomiast pozycję "k" klatek do przodu, zakładając stałą prędkość gracza i brak zmiany kierunku, znajdujemy, mnożąc prędkość_gracza przez "k".

A nie wystarczy potraktowac x i y jak vector2D?

nx = postac_gracza.x + postac_gracza.hspeed;
ny = postac_gracza.y + postac_gracza.vspeed;

 

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...