Rakieta samonaprowadzająca

0

Witam, ostatnio na potrzeby gry zamarzyła mi się rakieta samonaprowadzająca.

Pomysł jest taki, że statek, wystrzeliwuje rakietę (załóżmy wbrew prawom fizyki, że prędkość statku nie jest dodawana do prędkości rakiety), która porusza się z pewną prędkością początkową o wektorze zwrócony "przed" statek.

Na mapie znajduje się przeciwnik. Znamy jego pozycje oraz wektor prędkości w danym momencie.

Cały bajer ma polegać na tym, że ta wystrzelona rakieta ma tak dobierać kierunek przyspieszenia, by ostatecznie mieć możliwość trafienia w przeciwnika.

Jednym słowem potrzebuję napisać funkcje, która mogła by robić za system antyrakietowy w Pentagonie :)

Szukałem trochę w internecie, ale zazwyczaj mówi się o programie w którym patrząc na aktualnie wykonywany ruch przeciwnika program przewiduje jak wystrzelić pocisk:
http://gamedev.stackexchange.com/questions/28481/how-to-lead-a-moving-target-from-a-moving-shooter
lub coś podobnego, ja natomiast najpierw strzelam, a dopiero potem rakieta staram się trafić.

  1. Posiada ktoś może jakieś pomocne materiały, kody, artykuły z programowania/matematyki?
  2. Oceniacie, że jest to w miarę sensownie wykonalne?

Dodam tylko, że pisze to w SFMLu, ale podejrzewam, że nie ma to żadnego znaczenia.

PS. Jeśli moderator uzna, że temat warto przenieś w inne miejsce, to nie będę miał pretensji :)

2

Na potrzeby gry zawsze samonaprowadzanie robiłem w następujący sposób. Pocisk ma jakąś tam stałą prędkość. Pocisk ma ustalony cel, do którego ma dążyć. Pocisk zmienia kierunek tak żeby trafić cel (atan2). Jednak ta zmiana nie jest natychmiastowa. Prędkość obrotu powinna być tak dobrana, by rakieta zataczała łuk, gdy cel się przemieszcza.

0

załóżmy wbrew prawom fizyki, że prędkość statku nie jest dodawana do prędkości rakiety

Cały bajer ma polegać na tym, że ta wystrzelona rakieta ma tak dobierać kierunek przyspieszenia

Chcesz implementować fizykę „wbrew prawom fizyki”. A więc chcesz wymyśleć własną fizykę, i ją zaimplementować.

Nie łatwiej jednak otworzyć podręcznik do fizyki i zastosować wzory tam zawarte?

1

W prawdzie tu jest C++, ale z myślą ostatnio częstych tego typu pytaniach to napisałem. Nie będziesz miał raczej problemu z zapisaniem tego w C++. W moim programie to gracz naciska przyciski strzałek i spację. Musiałbyś napisać algorytm (tzw algorytm sterowania), który zastępuje gracza i operuje 5-ciu zmiennych sterujących (lewo, prawo, góra, dół, detonacja) i zmiennej stanu ekran. Na podstawie tego, co masz na ekranie, wyznaczasz nowe wartości zmiennych sterujących, wykonujesz ruch, zapisujesz stan ekranu, kasujesz ekran i od nowa.

http://4programmers.net/C_sharp/Gotowce/Boomfighter_prosta_gra_pilot_mysliwca

Jak najbardziej własna fizyka.

Ja tylko określiłem cel funkcji, do którego trzeba dodać jak najszybsze trafienie celu.

1
Azarien napisał(a):

załóżmy wbrew prawom fizyki, że prędkość statku nie jest dodawana do prędkości rakiety

Cały bajer ma polegać na tym, że ta wystrzelona rakieta ma tak dobierać kierunek przyspieszenia

Chcesz implementować fizykę „wbrew prawom fizyki”. A więc chcesz wymyśleć własną fizykę, i ją zaimplementować.

Nie łatwiej jednak otworzyć podręcznik do fizyki i zastosować wzory tam zawarte?

Nawet założywszy, że zrobiłbym to po bożemu i zsumowałbym prędkość wystrzelenia pocisku oraz prędkość statku, to i tak nic by to nie wniosło do tematu. Ot, lekkie utrudnienie.

Nie znam podręcznika do fizyki, który omawiałby powstały problem. Dlatego właśnie prosiłem o materiały :)

Tak czy inaczej, dziękuję Spine'owi i Arturowi za wasze rady i kod ;) Postaram się coś z tego sklecić.

0
Totalq napisał(a):

Nie znam podręcznika do fizyki, który omawiałby powstały problem. Dlatego właśnie prosiłem o materiały.

Dowolny z opisem grawitacji, podstaw kinematyki oraz rzutem pionowym, poziomym i ukośnym ;)
Więc tak naprawdę każdy podręcznik do szkoły średniej, pierwszy z drugim rozdziałem najczęściej.

1

Tutaj jak to zrobic przy statycznych obiektach: http://www.riemers.net/eng/Tutorials/XNA/Csharp/series2d.php Fajnie jest tam zrobiony obrot i symulacja sil na pocisk.

Zrobilbym cos podobnego, tylko w momencie jak rakieta sie przekreci i zaczyna sie obnizac dolozyc AI sterujace ciagiem. Znamy odleglosc miedzy obiektami, wiec mozna policzyc ile czasu rakieta poleci do miejsca gdzie jest obiekt w tym momencie, przewidziec gdzie znajdzie sie po takiej jednostce czasu i na podstawie tego obracac lewo/prawo (oczywiscie proces powtarzac, w zaleznosci od tego jak czesto i jaka bedzie zwrotnosc rakietyalbo bedzie 100% skutecznosc albo nie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1