Skocz do zawartości

Zatrzymanie ruchu w stepie


Prencik

Rekomendowane odpowiedzi

Witam, w stepie mam taki kod

GML
if mouse_x>x and global.przycisk=1

{

if position_empty (x-225,y) and x-225>=450

{

action_move_to(x-225,y)

}}

 

if mouse_x<x and global.przycisk=1

{

if position_empty (x+225,y) and x+225<=3150

{

action_move_to(x+225,y)

}}

 

i chce żeby ów obiekt przeniósł się tylko raz o te 225 w daną stronę. Jednak x się cały czas zmienia przez co obiekt ciągle przeskakuje i wychodzi z tego ruch. Moje pytanie brzmi jak go zatrzymać?

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko problem w tym, że zmienna global.przycisk nie miała zatrzymywać tego stepu. Global.przycisk = 1 gdy powiedzmy w uproszczeniu jest naciśnięty lewy przycisk myszki. Chciałem by myszka kiedy jest naciśnięta i jest po lewej stronie obiektu przesunął się w prawo, a gdy jest po prawej żeby przesunął się w lewo ( i to podczas jednego przytrzymania myszy).

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, tylko że Ty aktywujesz global.przycisk = 1 na naciśnięciu i już nie wyłączasz tej zmiennej, dlatego jest ciągły ruch. Musisz gdzieś wyłączyć tę zmienną. Jeżeli to zmienna do wielu zastosowań zrób to np. na końcu stepu.

Odnośnik do komentarza
Udostępnij na innych stronach

Chcesz uzyskać płynne przejście z kratki na kratkę? Czy ma to być taki natychmiastowy przeskok ale by kolejny był możliwy dopiero po odciśnięciu przycisku myszki?

A może byś chciał przeskok w jakiś odstępach czasowych podczas trzymania? (to by było najłatwiejsze)

Odnośnik do komentarza
Udostępnij na innych stronach

GML
/// Create

newX = x;

 

/// Step

if ( round(x-newX) != 0 )

{

x = lerp(x, newX, 0.5);

}

else

{

x = newX;

if mouse_x>x and global.przycisk=1

{

if position_empty (x-225,y) and x-225>=450

{

newX = x-225;

}

}

 

if mouse_x<x and global.przycisk=1

{

if position_empty (x+225,y) and x+225<=3150

{

newX = x+225;

}

}

}

Odnośnik do komentarza
Udostępnij na innych stronach

A więc ediepl twój kod działa dosłownie tak samo jak ten mój na samej górze, czyli obiekt przeskakuje z pozycji x=450 gdy myszka jest po lewej stronie do pozycji x=3150 gdy myszka jest po prawej stronie. I am Lord po wpisaniu twojego kodu obiekty robią dokładnie to samo tylko co 225 się na chwilkę zatrzymują

Odnośnik do komentarza
Udostępnij na innych stronach

I am Lord po wpisaniu twojego kodu obiekty robią dokładnie to samo tylko co 225 się na chwilkę zatrzymują

No i tak miało być, płynnie miały się poruszać co 225. Więc nie rozumiem w takim razie co chcesz osiągnąć. Prędkość możesz jeszcze zmienić zmieniając 0.5 na mniej w lerp()

Odnośnik do komentarza
Udostępnij na innych stronach

Trochę się namordowałem, ale w końcu mi się udało :D

GML
if ( round(x-newX) != 0 )

{

x = lerp(x, newX, 0.3);

if newX>x { j-=1 }

if newX<x { j+=1 }

}

else

{

x = newX;

if mouse_x>x and global.przycisk=1 and j<1

{

if position_empty (x-450,y) and x-225>=450

{

newX = x-225;

j+=1

}

}

 

if mouse_x<x and global.przycisk=1 and j>-1

{

if position_empty (x+450,y) and x+225<=3150

{

newX = x+225;

j-=1

}

}

}

 

if global.przycisk=0

{

j=0

}

 

Wielkie dzięki za pomoc

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