Skocz do zawartości

Obrót w stronę statycznego obiektu


Pablo-GM

Rekomendowane odpowiedzi

Witam dziś kolejny problem z serii banał ... Mam obiekt oStrzałka , który powinien się obracać w stronę statycznego obiektu - oCheck . Kod w strzałce wygląda tak :

GML
Create Event:

execute code:

 

image_alpha=0.5

image_angle=direction

 

 

End Step Event:

execute code:

 

direction=point_direction(x,y,oCheck.x,oCheck.y)

 

 

Draw Event:

execute code:

 

draw_sprite_ext(sprite_index,image_index,view_xview[0]+280,view_yview[0]+240,ima

ge_xscale,image_yscale,direction,image_blend,image_alpha);

 

Mimo tego kodu strzałka ustawia się tylko raz - po włączeniu aplikacji . Jak stworzyć płynną zmiane kierunku strzałki względem oCheck na mapie ?

Odnośnik do komentarza
Udostępnij na innych stronach

image_angle=direction musi też być w end step, inaczej wykona się raz.

 

EDIT: sorry, nie o to ci chodziło.

 

EDIT2: chociaż nie, tak czy siak musi to być w jakimś stepie, a jeśli chcesz płynną zmianę kierunku to skorzystaj z pętli, niech direction się dodaje/odejmuje, dopóki nie będzie równe point_direction.

Odnośnik do komentarza
Udostępnij na innych stronach

Step jest wykonywany co step, czyli room_speed FPS razy na sekundę. By zrozumieć jak rozwiązać twój problem wystarczy Ci to w step:

GML
if(direction<point_direction(x,y,oCheck.x,oCheck.y)){direction+=1}else{direction-=1}
Odnośnik do komentarza
Udostępnij na innych stronach

Niestety , Twój kod powoduje tylko i wyłącznie jeden obrót strzałki . Od początkowego zwrotu sprita czyli ' -> ' , obraca się do momentu skierowania groty w stronę oCheck . Problem dalej tkwi w tym , że jeżeli ja jako player zmienię moją pozycję to strzałka nie zmieni swojego zwrotu na odpowiedni .

Odnośnik do komentarza
Udostępnij na innych stronach

Możliwe, że masz dużą mapę. I strzałka faktycznymi współrzędnymi jest całkiem gdzie indziej niż view_xview[0]+280 i view_yview[0]+240.

 

Powinno być albo tak:

 

direction =point_direction(view_xview[0]+280,view_yview[0]+240,oCheck.x,oCheck.y);

albo

x = view_xview[0] + 280;

y = view_yview[0] + 240;

direction = point_direction(x,y,oCheck.x,oCheck.y);

 

draw_sprite_ext(sprite_index,image_index,view_xview[0]+280,view_yview[0]+240,ima

ge_xscale,image_yscale,direction,image_blend,image_alpha);

 

W dodatku nie masz średników i już mi się to nie podoba :lol:

 

No i może też masz więcej niż jeden obiekt typu oCheck. Wtedy strzała pokaże obrót do najstarszego z obiektów.

 

Trzeba się nauczyć debugować, bo to nie jest wcale skomplikowane. Np. zmienić oCheck.x,oCheck.y na mouse_x, mouse_y, albo dać więcej niż jedną strzałkę. :)

Post edytowany 500 razy xD

Odnośnik do komentarza
Udostępnij na innych stronach

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ę...