2012-03-24 6 views
0

ホーミング/追跡アルゴリズム。ホーミング/追跡アルゴリズム

私はゲームのためにこのアルゴリズムを開発してきました。 私が知っている唯一の追跡は標準です。X/Y座標に従います。

敵=チェイサー

ヒーロー=ビーイング追わ

同時に両​​方の敵ヒーロー移動します。

問題は、敵は直線になりますが、最終的には英雄に直接行かないことです。

x = x - 5;または​​

どのように私は/私のヒーローに直接敵の追撃を作るために引く追加値を決定します:私は、その理由は、私が使用して一定の値、

の例だと思いますか?

これを行うための数式はありますか?または条件?

ありがとうございます。

これと同じ投稿がある場合は、私に指示してください。ありがとうございました。

+0

ゲームはターンベースか、敵とヒーローは同時にポジションを変えますか? –

+0

これらは同時に位置を変えます。 –

+0

それから敵は主人公の現在の位置を使うことはできません。主人公が次のステップになるかどうかを推測し、代わりにその位置に移動させます。 –

答えて

0

あなたのヒーローが(99,50)、敵が(102,55)にある場合、完全な5ピクセルで移動するため、(97,50)、あなたの英雄の反対側。

これを解決するには、移動前にHero.XとEnemy.Xの違いを確認することができます。差異が(5)を取ろうとしている段階よりも少ない場合は、5ピクセル全体を移動せず、その差だけを移動してください。

私は正確なアルゴリズムを使用しているかどうかはわかりませんが、このロジックを使用すると、敵は斜めに移動するとSqrt(2)を速く動かすことができます。たぶんあなたは速度(速度)と組み合わせて方向(角度)の使用を検討すべきです。少しのゴニオメトリを使って少し難しくなりますが、動きは現実的です。

あなたはそれ以上のステップを踏んで、ある時点で英雄がどこにいるかを予測することができます。したがって、敵は英雄が今のところに移動しませんが、少しコーナー。

+0

はい!角度。私は追跡をより現実的にしたい。 if(enemyX = heroX){enemyX = heroX}; if(enemyX = heroX); if(enemyX = enemyX + 5; } if(enemyY> = heroY){enemyY = enemyY-5;} 'しかし、それは現実的な動きを与えません。 –