Skocz do zawartości

Chodzenie w kółko


Fervi_

Rekomendowane odpowiedzi

Witam!

 

1) Sorry, jeśli nie zrozumiecie, ale zaraz wychodzę i za parę godzin będę, lekkie lamerstwo

2) Potrzebuję przykładu takiego, że objekt chodzi w kółko, a jako, że to problematyczne to kwadrat. Jednak nie za pomocą path, ale gołego kodu

 

Obiekt powiedzmy powstaje w swoim X i Y, potem leci X+60, Y+20, X-60 i Y-20. Jak ja robiłem swój projekt, to wykonywał tylko ostatnią linijkę. Ofc. na końcu jest w miejscu stworzenia

 

Ogólnie przepraszam, ale wychodzę, a jak wrócę zaadaptuje to do mojego projektu (Open Source rzecz jasna :P)

 

Fervi

Odnośnik do komentarza
Udostępnij na innych stronach

jesli dobrze rozumiem, chcesz aby obiekt ruszal sie po krawedzi prostokota?

 

to proponuje prosty sposob(mozna STEP, DRAW albo kdziekolwiek)

GML
//sc_square_move(_idx, _idy, _xoff, _yoff, _spdx)

var __xst, __yst, __xoff, __yoff, __spd, __x, __y;

__xst=argument0; //x start

__yst=argument1;

__xoff=argument2; //offset

__yoff=argument3;

__spd=argument4;

 

x+=(__spd*(x<__xst+__xoff)*(y=__yst))- (__spd*(x>__xst)*(y=__yst+__yoff));

y+=(__spd*(y<__yst+__yoff)*(x=__xst+__xoff))- (__spd*(y>__yst)*(x=__xst));

kod mozna poszerzyc o rozny speed dla roznych kierokow i test na speed ktory niekonczy sie dokladnie na scianie prostokota :)

GML
//sc_square_moveE( _idx, _idy, _xoff, _yoff, _spdx1, _spdy1, _spdx2, _spdy2)

var __xst, __yst, __xoff, __yoff, __xspd1, __yspd1, __xspd2, __yspd2, __x, __y;

__xst=argument0;

__yst=argument1;

__xoff=argument2;

__yoff=argument3;

__xspd1=argument4;

__yspd1=argument5;

__xspd2=argument6;

__yspd2=argument7;

 

x+=(__xspd1*(x<__xst+__xoff)*(y=__yst))- (__xspd2*(x>__xst)*(y=__yst+__yoff));

y+=(__yspd1*(y<__yst+__yoff)*(x=__xst+__xoff))- (__yspd2*(y>__yst)*(x=__xst));

 

// for situations when multiply of _spd don´t give __x+__xoff

if (x>__xst+__xoff) {x=__xst+__xoff};

if (x<__xst) {x=__xst};

if (y>__yst+__yoff) {y=__yst+__yoff};

if (y<__yst) {y=__yst};

zamiast if mozna by bylo dac jesce cos innego, ale niechcialem zabardzo komplikovac sprave :)

pred wykonaniem scritpu nalezy RAZ ustavic zmienne _idx, _idy a potem ich uzywac tak:

GML
sc_squaremove(_idx, _idy, 500, 20, 5);

//albo

sc_squaremoveE(_idx, _idy, 400, 225, 5, 15, 10, 7);

WAZNE: niemozna umiescic instancje wenotrz prostokota. to jest problem programisty. z zevnostr prostokota jak sie oddali od krawedzi, to script sc_square_moveE sobie poradzi :)

 

mala modifikacja dla ruchu w oddwrotnym kierunu :)

GML
x+=+(__xspd1*(x<__xst+__xoff)*(y=__yst+__yoff))- (__xspd2*(x>__xst)*(y=__yst));

y+=+(__yspd1*(y<__yst+__yoff)*(x=__xst))- (__yspd2*(y>__yst)*(x=__xst+__xoff));

Odnośnik do komentarza
Udostępnij na innych stronach

Po kiego. Chodząc w kole można wykorzystać magię trygonometri, a kwadrat to nic innego jak zaokrąglenie kąta do 90.

GML (create)
dir=0;

GML (step)
x+=sin(degtorad(dir div 90 * 90));

y+=cos(degtorad(dir div 90 * 90));

dir=(dir+1) mod 360;

 

Z tym kodem kwadrat ma bok długości 90 pikseli, możesz to przyspieszyć/zwolnić zmieniając o ile zwiększa się dir na końcu step lub mnożąc x+= / y+= przez jakąś wartość.

 

EDIT: Z tym kodem obiekt zaczyna ruch idąc w dół, zmień początkowe dir (0,90,180,270) aby to zmienić.(Obiously praktycznie każda zmiana w kodzie zmieni kierunek początkowy, ale to jest najłatwiejsze)

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