Это запись о реализации самонаводящихся ракет в GameMaker.
Иначе говоря, объектов, что меняют направление движения для попадания в движущуюся цель.
Данный пример имеет много общего с записью о повороте углов.
Для начала, вам понадобятся скрипты cycle и angle_rotate из нее,
/// cycle(value, min, max) var result, delta; delta = (argument2 - argument1); result = (argument0 - argument1) mod delta; if (result < 0) result += delta; return result + argument1;
/// angle_rotate(angle, target, speed) var diff; // 180 is to be replaced by "pi" for radians diff = cycle(argument1 - argument0, -180, 180); // clamp rotations by speed: if (diff < -argument2) return argument0 - argument2; if (diff > argument2) return argument0 + argument2; // if difference within speed, rotation's done: return argument1;
Далее всё просто - нужно найти координаты цели, и сделать, чтобы ракета поворачивался в их сторону по мере движения (в событии Step):
if (instance_exists(target)) { direction = angle_rotate(direction, point_direction(x, y, target.x, target.y), 3); }
Где target – переменная, содержащая целевой объект (может быть каким-нибудь obj_player или ID экземпляра), а 3 – скорость поворота, в углах за кадр.
Можно так же добавить ускорение (speed = min(speed + ускорение, максимальная скорость)) и поворот в направлении движения (image_angle = direction) по вкусу.
И это, собственно, и всё. Мини-демонстрация:
Скачиваемый пример (что был показан на GIF-ке) несколько расширен, включая возможность размещения\удаления стен, и простую графику в стиле одной из моих старых игр:
Примечание: Изначально эта запись была опубликована 4 июня 2013 года; Она была обновлена 19 марта 2017 года, добавляя демонстрацию и основной код в саму запись.
Сначала ракета летит на цель, затем с какойто вероятностью включается переворот вверх или низ и начинает работать код в степе direction+=1 или -=1 например, пока ракета не опишет 360 градусов (вставить счётчик), затем летит опять наводясь на цель. Както так.
Как вариант привинтить твой angular damping и orbiting для большего эфекта