0

我正在尝试为我的子弹地狱游戏制作一个寻的弹丸,我需要能够计算目标和弹丸之间相对于弹丸角度的角度(0 度将是弹丸指向的方向)。现在角度计算是绝对使用point_direction完成的,但问题是当目标位于第 4 个扇区时,射弹开始转向错误的方向。另一个问题是,如果射弹在追击目标时进行 180 度转弯(或者如果被敌人发射则向下移动),转向方向将反转。我也尝试过mp_potential_函数,但它们的寻路太“激进”了。

在此处输入图像描述

这是我当前的代码的样子:

if(instance_exists(obj_fighter1)) {
    var target;
    target = instance_nearest(x, y, obj_fighter1);

    if(target != noone) {
        var angle_to_target;
        angle_to_target = point_direction(x,y,target.x,target.y);

        if(angle_to_target < direction) {
            direction -= 2;
        }

        if(angle_to_target > direction) {
            direction += 2;
        }
    }
}

希望这些信息足够并且可以理解。

4

1 回答 1

1

好的,一个常见的 Game Maker 问题。我使用的例程如下。看着它,它可以做一些重构,但它确实有效。

var wantDir;
var currDir;
var directiondiff;
var maxTurn;

// want - this is your target direction \\
wantDir = argument0;

// max turn - this is the max number of degrees to turn \\
maxTurn = argument1;

// current - this is your current direction \\
currDir = direction;

if (wantDir >= (currDir + 180))
{
    currDir += 360;
}
else
{
    if (wantDir < (currDir - 180))
    {
        wantDir += 360;
    }
}

directiondiff = wantDir - currDir;

if (directiondiff < -maxTurn)
{
    directiondiff = -maxTurn
}

if (directiondiff > maxTurn)
{
    directiondiff = maxTurn
}

return directiondiff

所以你会调用它,它会返回一个值,你可以添加到导弹的角度。因此,如果您调用它scr_get_angle,您的代码可能如下所示:

if(instance_exists(obj_fighter1)) {
    var target;
    target = instance_nearest(x, y, obj_fighter1);

    if(target != noone) {
        var angle_to_target;
        angle_to_target = point_direction(x,y,target.x,target.y);

        direction += scr_get_angle(angle_to_target, 2);
    }
}
于 2015-08-21T10:08:32.963 回答