Game Maker - 如何为射弹创造归巢效果?

时间:2015-08-20 16:38:38

标签: game-maker gml

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

enter image description here

这是我目前的代码:

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;
        }
    }
}

希望这些信息足够且易于理解。

1 个答案:

答案 0 :(得分: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);
    }
}