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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.