ka21k Opublikowano 3 Czerwca 2011 Udostępnij Opublikowano 3 Czerwca 2011 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 Więcej opcji udostępniania...
ediepl Opublikowano 3 Czerwca 2011 Udostępnij Opublikowano 3 Czerwca 2011 Było w przykładach:tu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 3 Czerwca 2011 Udostępnij Opublikowano 3 Czerwca 2011 albo daj w pocisku w stepie direction=point_direction(x,y,costam.najblizszy.x,costam.najblizszy.y) Ale to bedzie samonaprowadzal Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 3 Czerwca 2011 Udostępnij Opublikowano 3 Czerwca 2011 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 Więcej opcji udostępniania...
ka21k Opublikowano 4 Czerwca 2011 Autor Udostępnij Opublikowano 4 Czerwca 2011 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 Więcej opcji udostępniania...
Dawka83 Opublikowano 4 Czerwca 2011 Udostępnij Opublikowano 4 Czerwca 2011 i.speed+0.000001 i robimy tęcze Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 4 Czerwca 2011 Udostępnij Opublikowano 4 Czerwca 2011 speed to nie jest prędkość obiektu strzelającego, ale prędkość wystrzelonego pocisku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi