2011-08-25 50 views
1

我正在制作一个使用非常简单的碰撞检测的游戏。我没有使用2D盒,因为这是一个矫枉过正的问题。基本上,它是Pong和fooseball的组合。当球速度加快并且速度非常高时,它会穿过它应该碰撞的墙。该代码以慢速和常规速度运行,但运动速度非常快。在碰撞期间穿过墙壁的物体

这是我的代码snipet:

pos.x是保持我的球中的x位置的矢量。

if (pos.x - radius < wallLeft){ 
     pos.x = wallLeft + radius; 
     vel.x *= -1; 
} 

我该怎么做才能改善这种情况? 谢谢

+0

球只在一个方向穿过墙吗? –

+0

球是否暂时通过并且反弹得太晚或者不会反弹?此外,我们需要这些字段的类型以及您在此之前如何进行运动计算。 – KillianDS

+0

尝试在if语句的条件检查上设置一个断点,以便查看为什么它没有注册。你是否使用pos.x作为无符号整数? – Dawson

回答

0

尝试增加wallLeft一点,以便球的速度永远不会比wallLeft更大,看起来球落到0以下后它会出现毛刺(或者你有一些我不知道的代码),不熟悉框架或其他代码是如何工作的,但这是解决它的最简单方法。如果你不想这么做,那么如果球的x小于0,那么可能有一些代码会执行某些操作,并且你必须使它更加宽松一点,也许可以这样做,以便如果球的x是小于-50,或类似的东西(玩数字直到它工作)

+0

我认为增加wallLeft实际上会移动他的墙... – KillianDS

+0

我不这么认为,这听起来像墙壁从wallLeft到屏幕左侧,墙壁会增长,但这是简单的修复。 – Markcf

0

可以说,如果(pos.x - 半径)== wallLeft然后球已经触及墙壁,其速度可以颠倒;如果你在循环中添加这个作为一个额外的测试它有帮助吗?

+0

我把它放到if语句中,我什么也没得到。虽然值得尝试。谢谢 –

0

我唯一的想法是速度非常高,以至于在将其添加到位置时发生溢出,再次产生pos.x> wallLeft + radius。

+0

我有一种感觉,速度变得比帧率更高,所以当程序通过时程序无法计算球的位置。该程序运行在60fps。那有意义吗? –

+0

@lucas:不是真的,如果它在第一帧错过了它,它应该在第二帧得到它,因为你实际检查它是否在墙后面,而不是如果它与墙重叠。即使它会超过/下溢,它实际上应该出现在另一侧(如果计算结果相似)。所以我认为我们错过了一些代码。 – KillianDS

+0

是的,你应该在这里发布更多的代码。上面的代码片段不足以显示。 – karx11erx