Skocz do zawartości

Zablokowane Jak namierzyć poruszający się cel?


ka21k

Rekomendowane odpowiedzi

Witam.

Chciałbym jakoś zapisać w GML warunek na podstawie którego mój obiekt namierza inny obiekt który się porusza.

W zasadzie z samym namierzaniem nie ma większego problemu natomiast trafienie w cel to już inna historia.

Mam taki kod na ustawienie mojego obiektu w kierunku celu:

 

GML
//po rozlaczeniu statek2 samodzielnie wybiera najblizsze cele i ostrzeliwuje sie w kolo

if(global.polaczenie==1 && global.wspolnie==2)

{

//jesli na planszy sa obiekty

if(instance_exists(parent_wrog))

{

najblizszy=instance_nearest(x,y,parent_wrog);

kierunek2=point_direction(x,y,najblizszy.x,najblizszy.y);

image_angle=kierunek2;

}

}

Wszystko działa dobrze gdy cele są naprawdę blisko, ale na odległość nic nie można trafić ponieważ czas jaki potrzebuje pocisk aby dolecieć do celu pozwala mu na oddalenie.

W efekcie pociski przelatują za namierzonym obiektem. Ma na to też wpływ SPEED celu.

Jak napisać kod który będzie namierzał cele z wyprzedzeniem i ustawiał IMAGE_ANGLE w odpowiednim położeniu aby pociski dolatywały i trafiały w cel na czas?

Odnośnik do komentarza
Udostępnij na innych stronach

GML
direction = point_direction(x,y,i.x+lengthdir_x(i.speed*(distance_to_object(i)/speed),i.direction),i.y+lengthdir_y(i.speed*(distance_to_object(i)/speed),i.direction)) //"i" to nazwa obiektu, w który się celuje

image_angle = direction
Odnośnik do komentarza
Udostępnij na innych stronach

Witam.

Bardzo dziękuję za szybką pomoc, ale mam pewne zastrzeżenia co do działania przykładu kolegi Muuuuczek567 jak i podanego przez ediepl .

Rozumiem, że:

i.speed - to w moim przypadku prędkość najbliższej instancji,

speed - to moja własna prędkość

W takim razie gdy mój obiekt stoi w miejscu zachodzi dzielenie przez zero co wywala słusznie komunikat z błędem gdyż nie można dzielić przez zero.

Problem w tym, że obiekt który strzela zawsze będzie stał w miejscu i tego zmienić nie mogę. Dodatkowo niektóre obiekty do których celuję też mogą stać w miejscu, ale tutaj konfliktu w obliczeniach być nie powinno ponieważ mnożyć przez zero to już można.

Jak zatem sformułować wzór na trafienie?

Zaznaczam, że sam usilnie nad tym pracuję i nie czekam na gotowca.

Jeśli tylko zdołam wymyślić działający wzór natychmiast go przedstawię.

Jednakże liczę także na waszą pomoc w tej kwestii.

 

Edit: Okazało się, że zarówno kod kolegi Muuuuczek567 jak i podany przez ediepl jest poprawny.

Speed - to nie prędkość obiektu który strzela tylko pocisku który leci w cel.

Założyłem, że kod odnosi się do obiektu który celuje a nie do samego pocisku dlatego mi nie działało.

 

Jeszcze raz wielkie dzięki za pomoc.

Teraz pozostało mi jeszcze napisać kod który będzie wysyłał pociski tylko wtedy gdy cel będzie w odpowiednim polu widzenia, ale kod na to już widziałem gdzieś w otchłani tematów dla początkujących.

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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