我在这里遇到了一个奇怪的问题。我已经为我的敌人实施了一个视野,这样当玩家进入可检测区域(前方 120 度圆锥)时,他会被坏人追赶,直到他离开 FOV。
问题是敌人后面也有一个 120 FOV 的锥体,所以有两个锥体,一个在前面,一个在后面,我只想使用前面的那个。我唯一能想到的是我正在溢出通过的 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 才能使其工作,我认为这可能与问题有关。任何帮助是极大的赞赏!