Wezyr Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 Półtora godziny już główkuje jak zrobić opóźnione direction. Chodzi mi aby nie było np: GML direction=point_direction(x,y,mouse_x,mouse_y) tylko aby direction powoli dochodziło do pkt. x i y. Jakieś sugestie ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harrrry Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 Napisałem kiedyś taki skrypt, zaraz znajdę i podam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 GML dir = round(point_direction( x, y, mouse_x, mouse_y )); if( direction > dir ) direction -= 1; if( direction < dir ) direction += 1; if( direction > 360 ) direction -= 360; if( direction < 0 ) direction += 360; O to ci chodzi? :P EDIT: Poprawione, bo cuda na kiju by się działy w poprzednim skrypcie :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Wezyr Opublikowano 23 Września 2008 Autor Udostępnij Opublikowano 23 Września 2008 Ok dzięki. Prubowałem coś takiego podobnego ale nieposzło. Dzięki twoje działa ;] Edit: Chociaż niezupełnie bo jak myszka jest na dół od 0 stopni i porusze ją do góry żeby była nad 0 stopni to wtedy gracz zamiast krótszą drogą obraca się na około :[ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harrrry Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 GML // direction_smooth_set (value, destination, speed) var q1,q2,q3,q; q1=abs(argument0-argument1+360); q2=abs(argument0-argument1); q3=abs(argument0-argument1-360); q=0; if q1<q2 and q1<q3 q=1; if q2<q1 and q2<q3 q=0; if q3<q1 and q3<q2 q=-1; argument1+=360*q; q=argument0+(argument1-argument0)*(argument2/100); return q mod 360; speed w zakresie 1-100! optymalnie 25 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Wezyr Opublikowano 23 Września 2008 Autor Udostępnij Opublikowano 23 Września 2008 Harrrry: zaraz sprawdze i napisze ;p A czym jest tu value ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harrrry Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 arg0 - aktualna wartość w stopniach arg1 - wartość docelowa (skrypt sam oblicza czy zeskoczyć z 360 na 0 czy iść na około) arg2 - szybkość zwraca - nowy direction Lepiej dam przykład: GML direction=direction_smooth_set(direction,point_direction(mouse_x,mouse_y,x,y),25); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Wezyr Opublikowano 23 Września 2008 Autor Udostępnij Opublikowano 23 Września 2008 Ej nie chcę nic mówić ale ta samo jak u Nobody ;[ Tylko tutaj wybiera dłuższą drogę przy 180 stopniach ... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harrrry Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 Hmm, u mnie działało. Ale jeszcze sprawdzę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Wezyr Opublikowano 23 Września 2008 Autor Udostępnij Opublikowano 23 Września 2008 To sprawdź i napisz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Harrrry Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 GML // direction_smooth_set (value, destination, speed) var q1,q2,q3,q; q1=abs(argument0-(argument1+360)); q2=abs(argument0-argument1); q3=abs(argument0-(argument1-360)); q=0; if q1<=q2 and q1<=q3 q=1; if q2<=q1 and q2<=q3 q=0; if q3<=q1 and q3<=q2 q=-1; argument1+=360*q; q=argument0+(argument1-argument0)*(argument2/100); return q mod 360; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Snake Opublikowano 23 Września 2008 Udostępnij Opublikowano 23 Września 2008 albo GML (Step) dir_new = point_direction( x, y, mouse_x, mouse_y ); dir_side = dir_new - direction; if ( dir_side < -180 ) dir_side += 360; else if ( dir_side >= 180 ) dir_side -= 360; if ( abs( dir_side ) <= dir_speed ) direction = dir_new; else if ( dir_side < 0 ) direction -= dir_speed; else direction += dir_speed; dir_speed - szybkość obracania, dir_new - nowy kierunek. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi