物体在一次接触中多次碰撞[AndEngine]



在我正在开发的游戏中,我有身体(来自box2d扩展)飞来飞去。有些物体会相互碰撞。问题是,对于每个单独的联系,contactListener中的beginContact方法被调用两次(至少)。

两个碰撞体都具有1的最大弹性。

是否有一种方法可以使碰撞恰好发生一次,即每次接触只调用beginContact一次?

原来我错误地在另一个后面创建了两个相同的主体。显然,这会导致beginContact方法在每次碰撞时被调用两次。

这一定是我遇到过的最隐蔽的bug之一。

我有一个问题与您的问题相匹配(除了c++中的普通Box2D,尽管该问题对任何Box2D绑定都是通用的),但原因不同。
两个应该保持碰撞的形状在不久之后注册了EndContactBeginContact。原因是在碰撞开始后不久,其中一个在其主体上调用了setType
setType实际更改body类型时,所有涉及的联系人都将被删除并重新创建。这将导致再次调用联系人回调。
旧的Box2D版本似乎没有此行为

EndContact上放置一个断点并检查调用堆栈可以帮助调试这个问题。

最新更新