o_playerStep Event:
image_angle = direction; // Поворот спрайта равен направлению
Mouse Event for Glob Left Button:
if !instance_exists(o_joystick) // Если нет джостика
{instance_create(mouse_x,mouse_y,o_joystick);}; // То создаём его
o_joystickCreate Event:
maxdist = 40; // Максимальное расстояние от центра джостика
instance_create(x,y,o_runner); // Создаём бегунок
image_alpha = 0.5; // Делаем джойстик полупрозрачным
Step Event:
dist = point_distance(x,y,mouse_x,mouse_y); // dist равна расстоянию до мыши
if dist > maxdist
{dist = maxdist;};
// Проверка, чтобы dist не была больше максимального расстояния
if mouse_check_button(mb_left) // Если левая кнопка мыши зажата
{
direction = point_direction(x,y,mouse_x,mouse_y); // Джойстик "смотрит" на мышь
o_player.speed = dist/5; // Скорость игрока равна расстоянию до мыши делённого на 5
o_player.direction = direction; // Направление игрока равно направлению джойстика
};
if mouse_check_button_released(mb_left) // Если левая кнопка мыши отпущена
{
o_player.speed = 0; // Останавливаем игрока
instance_destroy(); // Удалаем джойстик
with (o_runner) // Обращаемся к бегунку
{instance_destroy();}; // И удаляем его
};
o_runnerCreate Event:
image_alpha = 0.75; // Делаем бегунок полупрозрачным
Step Event:
x = mouse_x;
y = mouse_y;
// Координаты равны координатам мыши
if x > xstart+lengthdir_x(o_joystick.dist,o_joystick.direction) || x < xstart+lengthdir_x(o_joystick.dist,o_joystick.direction)
{x = xstart+lengthdir_x(o_joystick.dist,o_joystick.direction);};
if y > ystart+lengthdir_y(o_joystick.dist,o_joystick.direction) || y < ystart+lengthdir_y(o_joystick.dist,o_joystick.direction)
{y = ystart+lengthdir_y(o_joystick.dist,o_joystick.direction);};
// Проверка, чтобы бегунок не уходил за пределы джостика
Однако, пример является не адаптированным под мультитач. А так же, в нём возникают некоторые проблемы, при движении видов.
Руки всё не доходят доделать пример и портировать на GMS с некоторыми улучшениями. Поэтому советую использовать
этот пример.