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ę ;)