Skocz do zawartości

Ruch po okręgu


Rekomendowane odpowiedzi

Witam

 

Szukam sposobu do uzyskania ruchu po okręgu, tak by można było podać obiekt, wokół którego ma się przemieszczać oraz prędkość z jaką ma się poruszać.

 

Oraz opcjonalnie zrobienie tego w taki sposób by jeżeli byłoby więcej obiektów krążących utrzymywałyby między sobą najwyższy możliwy kąt (były równomiernie rozłożone) i gdyby jakiś został dodany/zabrany byłyby dopasowane.

 

Dotychczas wymyśliłem tylko metodę polegającą na tworzeniu sprite'ów, w których była cała animacja poruszającego się obiektu, lecz jeśli chcę zwiększyć promień lub dodać ich więcej to muszę tworzyć nowe animacje.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki, działa.

 

Teraz próbuję uzyskać drugą część efektu. Pomyślałem, że jeżelibym poprzestał na dwóch to wystarczyłoby jakbym zmienił ( w kolejnym obiekcie)

GML
direction += spd;

/*na*/

direction += spd+180;

to uzyskuję odpowiedni efekt, jednak drugi obiekt cały czas miga no i wymaga to tworzenia większej ilości obiektów.

Odnośnik do komentarza
Udostępnij na innych stronach

a pęta to co?

 

GML
r = 50;

spd = 5;

count = 5; // ilość krążących obiektów

xx = obiekt.x

yy = obiekt.y

 

for ( i = 0; i < count; i += 1 )

{

x_ = xx + lengthdir_x( r, direction + (360 / count) * i );

y_ = yy + lengthdir_y( r, direction + (360 / count) * i );

draw_sprite( sprite_obiektu, -1, x_, y_ );

}

 

direction += spd;

wsadz to w draw jakiegoś niezależnego obiektu i powiedz czy uzyskałeś zamierzony efekt :)
Odnośnik do komentarza
Udostępnij na innych stronach

Najprościej, to jest stworzyć sprita z 10 klatkami (5 z obrazkiem, 5 pustych). Potem stworzyć obiektA i obiektB. Przyjmujemy, że poruszamy obiektemA. ObiektB porusza się po okręgu względem obiektA.

GML (Create obiektA)
b = instance_create(x+8,y+8,obiektB);

b.obj = id;

Poniżej poruszanie się po okręgu. ObiektB musi mieć ustawiony ten migający sprite.

GML (Step obiektB)
var angle, obj;

angle = 0;

obj = obiektA;

 

angle+=10;

if angle>=360 angle-=360;

// jesli oHero bedzie zniszczony, oAura tez bedzie

if !instance_exists(obj)

{

instance_destroy();

exit;

}

x=obj.x+lengthdir_x(16,angle);

y=obj.y+lengthdir_y(16,angle);

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