Xna 检测球击中边界框的位置?新华社

Xna 检测球击中边界框的位置?新华社,xna,collision,bounding-box,Xna,Collision,Bounding Box,刚刚开始使用XNA,这个例子会有很大帮助 我做了一个简单的测试,在那里我得到了一些地形和一个球,当球击中地形时,它停止。我通过在碰撞时将球的位置设置为刚好位于地形顶部来实现这一点 对于我的问题,我使用边界框,但是如果球从左侧或右侧击中地形,它看起来不太好,因为它在顶部重生。如何检查侧面的命中率 现在代码出现了短故障: if (playerOne.BoundingBox.Intersects(terrain.BoundingBox) playerOne.Position.Y = terra

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

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

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

现在代码出现了短故障:

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

   playerOne.Position.Y = terrain.BoundingBox.Top;
球在哪里


提前谢谢

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

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

它是侧向的,但您应该能够调整原则。

XNA BoundingBox没有内置的方法来帮助确定哪一侧发生了碰撞。有些人已经将边界框拆分为6个框(当前框的每一面对应一个框,就像房间周围的墙一样),但这仍然会在角落附近带来一些麻烦,您可能会有重叠,并且必须解决您认为首先命中的框


最终的解决方案是为当前边界框的每个面创建一个平面,如果边界框检测到碰撞,则检查是否与每个平面发生碰撞。发生碰撞时,它可能同时与1、2或3个平面碰撞。如果对手超过1个,那么你需要为每个涉及的平面选择一个位置&无论哪个位置更接近球的先前位置,这都是球首先击中的一侧。

让你知道:只有游戏才有堆栈交换:非常感谢!真的帮了我大忙谢谢你的提示,很好的解释:)