【问题标题】:Detecting where the ball hit the bounding box? XNA检测球击中边界框的位置? XNA
【发布时间】:2011-11-17 08:58:46
【问题描述】:

刚刚开始使用 XNA,这个例子会很有帮助!

我做了一个简单的测试,我得到了一些地形和一个球,当球击中地形时它会停止。我通过将球的位置设置在碰撞时的地形顶部来做到这一点。

对于我的问题,我为此使用了边界框,但如果球从左侧或右侧击中地形,它看起来不太好,因为它会在顶部重生。我如何检查它的侧面撞击?

现在代码的小故障:

if (playerOne.BoundingBox.Intersects(terrain.BoundingBox)

   playerOne.Position.Y = terrain.BoundingBox.Top;

其中 playerOne 是球。

提前致谢!

【问题讨论】:

标签: xna collision bounding-box


【解决方案1】:

XNA BoundingBox 没有内置方法来帮助确定哪一侧发生了碰撞。有些人已将边界框分成 6 个框(当前框的每个面各一个,例如房间周围的墙壁),但这仍然会给您可能重叠的角落附近带来一些麻烦,并且必须解决您认为哪个框先打。

最终的解决方案是为当前边界框的每个面创建一个平面,如果边界框检测到碰撞,则检查与每个平面的碰撞。当您发生碰撞时,可能会同时针对 1、2 或 3 个平面。如果超过 1 个,则您需要为每个涉及的平面 determine point/plane contact positions 以及更接近球先前位置的那一侧,即它首先击中的一侧。

【讨论】:

  • 感谢您的提示,很好的解释 :)
【解决方案2】:

我强烈推荐本教程,它通过使用数学助手和弧度将球棒分成不同的区域并设置碰撞反弹的各种条件来涵盖您的确切情况。

http://ross-warren.co.uk/pong-clone-in-xna-4-0-for-windows/6/ 

它支持但你应该能够适应这些原则。

【讨论】:

  • 非常感谢!真的帮了我
猜你喜欢
  • 1970-01-01
  • 2012-03-23
  • 2012-12-23
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多