ゲームの周りでプレイヤーを追いかける敵を作りましたが、問題があります。敵は完全すぎて、プレイヤーに近づくとすぐに互いに収束します。これは、ゲームが更新されるたびに、プレイヤーの方向に移動するためです。プレイヤーを追いかけている間にAIの敵が互いに集まってきます
私はおそらく、動きの角度で敵にいくつかのランダム性を導入したいと思います。
Angle = (float)Math.Atan2((HeroPosition - Position).Y, (HeroPosition - Position).X)// Positions are Vector2s
GlobalForce Propellant = new GlobalForce((float)Math.Cos(Angle)/2, (float)Math.Sin(Angle)/2);
ApplyForce(Propellant);
私はそこ角度に乱数を追加しよう:これは私が(それはまだ終わっていないとして、私はそれを最適化していないので、私は、高オーバーヘッドの承知している)、これまで持っているものです問題のカップルです:
彼らはすべてがシード時間は、それらのすべて
乱数がその角度ごとの更新にとても異なっても同じであることをお互いの後にこんなに早く更新されますの敵のジャンプが不規則に。
私が知りたいことは、ほとんどのゲームはどのようにこの問題を回避しますか?敵を(他の敵のリストにアクセスすることなく)異なる経路にするにはどうすればよいですか?
EDIT:そのので、彼らドンほとんどのゲームは、敵がお互いをブロックすることによってこの問題を回避
Angle = (float)Math.Atan2((HeroPosition - Position).Y, (HeroPosition - Position).X);
GlobalForce Propellant = new GlobalForce((float)Math.Cos(Angle)/2, (float)Math.Sin(Angle)/2);
ApplyForce(Propellant);
foreach (Enemy e in OtherEnemies)
{
if (e != this)
{
if ((e.Position - Position).Length() < 64)
{
float angleBetween = MathHelper.TwoPi-(float)Math.Atan2((e.Position-Position).Y, (e.Position-Position).X);
GlobalForce avoidance = new GlobalForce((float)Math.Cos(angleBetween)*2, (float)Math.Sin(angleBetween)*2);
ApplyForce(avoidance);
}
}
}
各敵が独立しており、他の敵の位置にアクセスできない場合はどうなりますか? – annonymously
なぜ彼らはアクセスできませんか?おそらく、周囲の地図領域を検索する "findNearbyUnits()"メソッドによって、このデータにアクセスできるようにする必要があります。 – mikera
私は今アップデートメソッドで敵のリストへの参照を渡し、それらの間の角度を計算し、あまりにも近すぎるとそれらを押し離す力を作り出すことに決めました – annonymously