【发布时间】:2018-08-05 04:13:31
【问题描述】:
我正在尝试为敌人类创建视线方法。但是,无论玩家离敌人有多近,或者光线是否穿过任何方块到达玩家,它总是返回 false。
public virtual bool PlayerInLOS()
{
Vector3 middleOfPlayer = new Vector3(Level.Player.Position.X, Level.Player.Position.Y - Level.Player.BoundingRectangle.Height / 2, 0);
Vector3 middleOfEnemy = new Vector3(Position.X, Position.Y - localBounds.Height / 2, 0);
Vector3 direction = middleOfPlayer - middleOfEnemy;
float distanceToPlayer = Vector3.Distance(middleOfEnemy, middleOfPlayer);
if (direction != Vector3.Zero)
direction.Normalize();
Ray lineOfSight = new Ray(middleOfEnemy, direction);
float? lineToPlayer = lineOfSight.Intersects(Level.Player.BoundingBox);
foreach (BoundingBox box in Level.boundingBoxes)
{
float? distanceToIntersect = lineOfSight.Intersects(box);
if (distanceToIntersect == null)
continue;
else if (distanceToIntersect < visionLength && distanceToIntersect < distanceToPlayer && distanceToIntersect != null)
return false;
}
// Never gets to this part because it always returns before it exits the for loop
if (lineToPlayer < visionLength)
return true;
else return false;
}
有什么想法吗?谢谢。
【问题讨论】:
-
你做了什么调试,可能用 cmets 显示你调试的地方和发生了什么
-
我做了相对较少的调试,因为我已经在脑海中一步一步地经历了很多次,我看不出它可能在哪里搞砸了。我尝试在 foreach 循环中的 if 语句中移动检查,但它没有改变任何东西。