GameMaker: Самонаводящиеся ракеты

Homing missiles example for GameMaker

Это запись о реализации самонаводящихся ракет в 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-ке) несколько расширен, включая возможность размещения\удаления стен, и простую графику в стиле одной из моих старых игр:

Скачать GMK

Примечание: Изначально эта запись была опубликована 4 июня 2013 года; Она была обновлена 19 марта 2017 года, добавляя демонстрацию и основной код в саму запись.

Похожие записи

GameMaker: Самонаводящиеся ракеты: Один комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *