XNA boundingbox 2d矩形

我正在检查我创建的光线是否与矩形相交。 我正在使用boundingbox类将矩形传递到Ray类中的intersect方法,但不幸的是,它不工作我想知道如果它与我如何构造boundingbox或Ray有什么关系。

代码如下,任何帮助,这将是伟大的。

Ray bulletRay = new Ray(new Vector3(lensPosition, 0.0f), (new Vector3(lensPosition, 0.0f) - new Vector3(level.Player.Position.X, level.Player.Position.Y - 32.0f, 0.0f))); Rectangle tileBounds = Level.GetBounds(x, y); BoundingBox box = new BoundingBox( new Vector3(tileBounds.Left, tileBounds.Top, 0), // Front = 0 new Vector3(tileBounds.Right, tileBounds.Bottom, 0)); // Back = 0 float? output; bulletRay.Intersects(ref box,out output); if (output.HasValue) { wallInWay = true; } 

这里是你的代码的重构(这和你在问题中发布的东西完全一样,我只是写了一点不同):

 Vector3 rayStart = new Vector3(lensPosition, 0.0f); Vector3 pointOffset = new Vector3(level.Player.Position.X, level.Player.Position.Y - 32.0f, 0.0f); Vector3 direction = rayStart - pointOffset; Ray bulletRay = new Ray(rayStart, direction); 

这光芒总是直下来,这不是你想要的。

既然你没有告诉我们你的射线应该如何定义,我不能告诉你究竟哪个代码可以解决你的问题。

但是,您应该修复上述代码,以使pointOffset满足以下条件:

  • 它在光线上。
  • 这与玩家位置不一样。
  • 它在玩家和想要的盒子之间碰撞射线。

描述两个Vector3点的函数的图表。