
Система самонаведения в GameMaker 8
Heksenmaister
опубликовал в
Game Maker
Предлагаю весьма простой способ реализации самонаведения на GML.
Объект будет непрерывно следовать за другим объектом, причём без рывков, с плавным поворотом и возможностью настраивать все параметры.В Create объекта, который будет наводиться пишем:
Run_Speed = (любое число); //Скорость движения объекта
Rotate_Speed = (любое число); //Скорость вращения объекта
В Step объекта, который будет наводиться пишем:
MX = (за кем следить.x); //Если за курсором мыши, то (mouse_x)
MY = (за кем следить.y); //Если за курсором мыши, то (mouse_y)
if (image_angle > 180)
{
image_angle -= 360
};
if (image_angle < -180)
{
image_angle += 360
};
ma = (-180 * arctan2 (MY-y,MX-x) / pi); //Вычисление углов
MX = (ma - image_angle);
MY = (360 + MX);
if (MY > 360)
{
MY -= 720
};
if (abs(MX) > abs(MY))
{
MX = MY
};
if (abs(MX) < Rotate_Speed)
{
image_angle = ma
};
else
{
if (MX > 0)
{
image_angle += Rotate_Speed //Поворот
}
else
{
image_angle -= Rotate_Speed //Поворот
}
};
x -= (Run_Speed * sin(pi *(image_angle - 90) / 180)); //Присвоение координаты x
y -= (Run_Speed * cos(pi *(image_angle - 90) / 180)); //Присвоение координаты y
Возможно придётся поиграть с настройками скоростей, дабы избежать зацикливания по-кругу.
Если возникнут вопросы, прошу обращаться, помогу чем смогу.
3 комментария
MY = (за кем следить.y); //Если за курсором мыши, то (mouse_y)
if (image_angle > 180)
{
как для клавиатуры написать