私がここで抱えている奇妙な問題。敵の視野を実装しました。これにより、プレーヤーが検出可能な領域(正面120度の円錐)内を移動すると、FOVの外に出るまで悪者に追われます。
問題は、120 FOVのコーンが敵からも戻ってくることです。そのため、2つのコーンがあり、1つは前、もう1つは後ろにあり、前の1つだけを使用します。私が考えることができる唯一のことは、私が合格したPIをオーバーフローしているということですか?よくわかりません。
このチュートリアルを使用して、ベクトル数学を使用してこれを実装しました。ドット積セクション。 http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-2/
これがFOVに関連するコードです。
Vector2 EnemyVecAngle = new Vector2((float)Math.Cos(EnemyAnimation.Angle), (float)Math.Sin(EnemyAnimation.Angle));
//normalize
Vector2 EnemyFacingN = Vector2.Normalize(EnemyVecAngle);
Vector2 EnemytoPlayer = Vector2.Normalize(player.Position - Position);
//check angle
float CheckAngle = (float)Math.Acos(Vector2.Dot(EnemyFacingN, EnemytoPlayer));
if ((CheckAngle >= 60) && (CheckAngle <= 120)
following = true;
これは、一度検出されると敵をプレイヤーに向けさせるステートメントです
EnemyAnimation.Angle = (float)Math.PI / -2 + (float)Math.Atan2(Position.Y - player.Position.Y, Position.X - player.Position.X);
なぜそれが機能するために-PI/2を追加する必要があるのか疑問に思っています、これは問題に関連している可能性があると思います。どんな助けでも大歓迎です!