Ignatus Opublikowano 1 Stycznia 2017 Udostępnij Opublikowano 1 Stycznia 2017 (edytowane) Prosta sprawa.Top Down- strzelam z łuku we wrogów i chcę żeby trafiona strzała została w miejscu w które trafiła nawet kiedy wróg się obraca i porusza. Zgodnie ze znalezionymi tropami w necie zrobilem: End Step strzaly GML if hit=true { if (instance_exists(enemy)){ x=en.x+lengthdir_x(0,enemy.image_angle) y=en.y+lengthdir_y(0,enemy.image_angle) Efekt= strzala trzyma sie postaci wroga ale wcale się nie obraca (ma caly czas image_angle ktory miala w momencie kolizji) dorzucilem w takim razie GML image_angle=enemy.image_angle Efekt= sukces! Ale tyczy się to tylko jednej strzaly-kazda kolejna pokrywa sie z pierwszą i nawet jej nie widac. Co ciekawe po przeniesienie dokladnie tego kodu z End Step na Step sprawia ze strzaly wbijaja sie i trzymaja indywidualnie-tak jak powinny.Ale obracają z beznadziejnym opóźnieniem (w sumie nie wiem dokladnie o co chodzi ,wyglada jakby sie krecily wewnatrz postaci swoim tempem-w end step kreca jak powinny) Rzecz wydaje się banalna ale nie mam pojęcia co z tym zrobić.. Edytowane 2 Stycznia 2017 przez Threef Przeniosłem do osobnego tematu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Stycznia 2017 Udostępnij Opublikowano 2 Stycznia 2017 W swoim endstep przy kolizji dopisz jakoś relatywny kąt pod jakim wbiła się strzała a potem rysuj uwzględniajac ten kąt. GML if hit=true { if (instance_exists(enemy)){ x=en.x+lengthdir_x(0,enemy.image_angle) y=en.y+lengthdir_y(0,enemy.image_angle) angle=image_angle-enemy.image_angle GML image_angle=enemy.image_angle+angle I staraj się nigdzie w projekcie nie używać begin i end step. Nie są potrzebne a to że ich potrzebujesz jest znakiem że masz bałagan w kodzie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 2 Stycznia 2017 Autor Udostępnij Opublikowano 2 Stycznia 2017 Świetne,wielke dzięki Threef.Teraz kąty obliczają tak jak powinny ale mam problem z miejscem wbicia strzały- zawsze strzała jest idealnie w środku wroga, jak zrobić żeby wbita była tam gdzie trafiła? ps.dlaczego nie używać Endstep i dlaczego przy zwyklym step taki uklad nie dziala? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Stycznia 2017 Udostępnij Opublikowano 2 Stycznia 2017 End Step wykona się po tym jak wszystkie inne obiekty wykonają swój step. Wydaje się to bardzo sensowne gdy chcemy wykonać coś zaraz po zwykłym step... ale to prowadzi do dużego bałaganu w kodzie. Szczególnie jeżeli trzeba później coś wykonać po tym End Step. Miejsce wbicia masz tutaj. Ustawiasz to zawsze na tę samą wartość. GML x=en.x+lengthdir_x(0,enemy.image_angle) y=en.y+lengthdir_y(0,enemy.image_angle) Może spróbuj tutaj także zapisać wartość o ile pixeli było przesunięcie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 2 Stycznia 2017 Autor Udostępnij Opublikowano 2 Stycznia 2017 Tak właśnie próbuję ale jak na razie bez efektu GML if collision_point(x,y,obj_Enemy_parent,1,0)&&(hit=false)&&(wall_hit=false){ px=x py=y en=instance_nearest(x,y,obj_Enemy_parent) angle=image_angle-en.image_angle hit=true} if hit=true { if (instance_exists(en)){ x=en.x-px+lengthdir_x(0,en.image_angle) y=en.y-py+lengthdir_y(0,en.image_angle) image_angle=en.image_angle+angle } Przy takim rozwiązaniu strzala znika nie wiadomo gdzie.Jakim tropem isc? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Stycznia 2017 Udostępnij Opublikowano 2 Stycznia 2017 Chcesz różnicę pomiędzy puntem kolizji a origin przeciwnika. GML px=x-en.x py=y-en.y Poza tym lepiej sprawdzać kolizję tak: GML var en=collision_point(x,y,obj_Enemy_parent,1,0); if (en)&&(hit=false)&&(wall_hit=false){ Instance nearest jest nie potrzebne i może zwracać błędy gdy jest dużo obiektów wokół siebie. A sama funkcja collision_point() zwraca ID instance z którym koliduje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ignatus Opublikowano 2 Stycznia 2017 Autor Udostępnij Opublikowano 2 Stycznia 2017 Przy GML x=en.x+lengthdir_x(0,en.image_angle)+px y=en.y+lengthdir_y(0,en.image_angle)+py Wbija się tam gdzie fizycznie powinno ale wraca pierwszy błąd -czylu strzała pływa sobie nienaturalnie zamiast obracac sie z celem Przy GML x=en.x+lengthdir_x(0,en.image_angle)-px y=en.y+lengthdir_y(0,en.image_angle)-py Strzala jest daleko od celu i sobie plywa Przy innych probach strzala znika po trafieniu w cel Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Stycznia 2017 Udostępnij Opublikowano 2 Stycznia 2017 Twoja strzała nie znika tylko jest rysowana w miejscu którego się tego nie spodziewasz. Na przykład jakieś x=432+lengthdir_x(0,en.image_angle)+440. Sprawdź jaka jest wartość i się dowiesz. A co do "nienaturalnego" poruszania. Przeciwnik się porusza i obraca. Być może zamiast różnicy w pozycjach x i y musisz zapamiętywać kąt i dystans pomiędzy punktami? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę