刚开始使用XNA,这个例子会有很多帮助!
我做了一个简单的测试,我得到了一些地形和一个球,当球击中它停止的地形时。我这样做是通过将球位置设置在碰撞时的地形顶部。
对于我的问题,我正在使用边界框,但是如果球从左侧或右侧撞击地形,它看起来不是很好,因为它在顶部重生。我如何检查它的侧面命中?
现在代码短暂出现故障:
if (playerOne.BoundingBox.Intersects(terrain.BoundingBox)
playerOne.Position.Y = terrain.BoundingBox.Top;
其中playerOne是球。
提前致谢!
答案 0 :(得分:1)
我强烈推荐这个教程,它通过使用数学助手和弧度将蝙蝠分成不同的区域并设置各种碰撞反弹条件来涵盖您的确切位置。
http://ross-warren.co.uk/pong-clone-in-xna-4-0-for-windows/6/
它的一面,但你应该能够适应这些原则。
答案 1 :(得分:1)
XNA BoundingBox没有内置的方法来帮助确定哪一侧发生了碰撞。有些人把边框分成了6个盒子(当前盒子的每个面都有一个,就像房间周围的墙壁一样)但是这仍然会在你可能有重叠的角落附近有点麻烦,必须解决你认为哪个盒子先击中。
最终的解决方案是为当前边界框的每个面创建一个平面,如果边界框检测到碰撞,则检查每个平面的碰撞。碰撞时,它可能同时对着1,2或3架飞机。如果它超过1,则需要determine point/plane contact positions每个涉及的平面和&无论哪个更靠近球的前一个位置,那就是它首先击中的一侧。