2

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

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

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

现在代码的小故障:

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

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

playerOne 是球。

提前致谢!

4

2 回答 2

1

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

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

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

于 2011-09-15T04:24:13.943 回答
1

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

最终的解决方案是为当前边界框的每个面创建一个平面,如果边界框检测到碰撞,则检查每个平面的碰撞。当您发生碰撞时,可能会同时针对 1、2 或 3 个平面。如果它反对超过 1 个,那么您需要确定每个涉及的平面的点/平面接触位置,无论哪个更接近球的先前位置,那就是它首先击中的一侧。

于 2011-09-15T08:56:11.007 回答