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: Самонаводящиеся ракеты: 2 комментария

  1. Сначала ракета летит на цель, затем с какойто вероятностью включается переворот вверх или низ и начинает работать код в степе direction+=1 или -=1 например, пока ракета не опишет 360 градусов (вставить счётчик), затем летит опять наводясь на цель. Както так.

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

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.