0

弾丸地獄ゲームのホーミング発射体を作成しようとしていますが、発射体の角度に対するターゲットと発射体の間の角度を計算できる必要があります (発射体が向いている方向は 0 度になります)。現在、角度計算はpoint_directionを使用して絶対的に行われていますが、問題は、ターゲットが 4 番目のセクターにあるときに発射体が間違った方向に操縦し始めることです。もう 1 つの問題は、発射体がターゲットを追跡しているときに 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

さて、よくあるゲーム メーカーの質問です。私が使用するルーチンは以下のとおりです。それを見ると、少しリファクタリングすることでできるかもしれませんが、うまくいきます。

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 に答える