Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witajcie :) :thumbsup:

 

Od niedawna głowię się nad tym jak zrobić podążanie obiektu po drodze myszki. Probowalem na patchach ale nie dalo rady. Zamieszczam GIF zebyście zrozumieli dokladnie o co chodzi a raczej o co biega :D xD :sp_ike:

 

gifekku9.gif

Opublikowano

lol, aleś mu odpowiedział. Ja kiedyś też się nad tym głowiłem, próbowałem dynamicznie tworzyć patch dodając punkty z położenia myszki ale d**a z tego. Myślę, że z własnym zapisywaniem pozycji myszki do tablicy powinno być ok :P

Opublikowano

KONTROLER:

GML (Create)
// Tworzymy kolejkę

global.queue = ds_queue_create();

GML (Step)
temp = ds_queue_tail( global.queue ); // Pobieramy najnowszą pozycję z kolejki, żeby sprawdzić, czy mysz nie stoi w miejscu ( bo po co zaśmiecać kolejkę? :) )

px = string_copy( temp, 0, string_pos( ":", temp ) - 1 ); // Pobieranie X

py = string_copy( temp, string_pos( ":", temp ) + 1, string_length( temp ) - string_pos( ":", temp ) - 1 ); // Pobieranie Y

if( point_distance( real(px), real(py), mouse_x, mouse_y ) > 3 )

ds_queue_enqueue( global.queue, string(mouse_x) + ":" + string(mouse_y) + ":" ); // Jeżeli pozycja myszki zmieniła się przynajmniej o 3px, dodajemy ją do kolejki

 

OBJEKT:

GML (Step)
if( variable_global_exists( "queue" ) ) // Jeżeli kolejka istnieje

{

var temp;

 

if( !variable_local_exists( "px" ) ) // Jeżeli objekt został dopiero co stworzony podajemy mu pierwszą daną

{

temp = ds_queue_head( global.queue );

ds_queue_dequeue( global.queue );

px = string_copy( temp, 0, string_pos( ":", temp ) - 1 );

py = string_copy( temp, string_pos( ":", temp ) + 1, string_length( temp ) - string_pos( ":", temp ) - 1 );

}

if( point_distance( x, y, real(px), real(py) ) > 3 ) move_towards_point( real(px), real(py), 1 ); // Jeżeli jesteśmy za daleko od punktu docelowego, poruszamy się do niego

else { // W przeciwnym przypadku ( jesteśmy tuż obok punktu ) podajemy mu następną daną z kolejki

temp = ds_queue_head( global.queue );

ds_queue_dequeue( global.queue );

px = string_copy( temp, 0, string_pos( ":", temp ) - 1 );

py = string_copy( temp, string_pos( ":", temp ) + 1, string_length( temp ) - string_pos( ":", temp ) - 1 );

}

 

}

 

Kontroler musi być w roomie, i room_speed musi być dość duży, ponieważ przy szybkim poruszaniu się myszy nie każda pozycja się zapisuje.

 

EDIT:

@2xUP: No napisałem cały kod, co chcesz :P

EDIT2: No i jeszcze dodałem komentarze do połapania się ;)

Opublikowano

Dzieki... działa nieźle.. ale troszke odstrasza mnie ten room_speed. To będzie Bijatyka.. więc znaczne zwiększenie szybkości jest nie wskazane. Ale zapisze sobie ten kod, mam juz pomysł gdzie go wykorzystać :) dzięki jeszcze raz.

 

Do zamknięcia :) heh

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