Skocz do zawartości

Zablokowane Nakierowywanie


Wezyr

Rekomendowane odpowiedzi

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

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

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

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

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

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

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