我正在使用Cocos2D和Box2D进行一些物理游戏。我的“球/子弹/毁灭者”物体在两个“目标”物体之间卡住,并且需要永远地解决这个问题。
这很愚蠢,因为子弹和目标物体之间的碰撞会破坏目标。 (通常,当然,这样可以正常工作。)
它没有像this question那样进入睡眠状态,因为它在两个物体之间的微小空间中疯狂地四处振动。
我将子弹作为Box2D中的“子弹”对象。
对象必须在前一帧中有一些最小距离才能算作碰撞吗?
答案 0 :(得分:0)
诀窍在于,对于给定的联系人“群集”,Box2D联系人监听器调用(按此顺序):
BeginContact()
PreSolve() // As many times as necessary
PostSolve() // As many times as necessary
EndContact()
默认情况下,我只是从EndContact()
获取联系人,这意味着在评估其效果之前会发生一系列快速碰撞。我将destroy
类型的代码移到了PostSolve()
,一切都很顺利。