在box2d 2.1中用于闪存的碰撞掩码位有问题

时间:2012-06-14 10:03:55

标签: flash box2d mask collision bit

Salut,我目前正在使用flash2进行池游戏,使用box2d进行物理模拟,并且我遇到了碰撞过滤。

我尝试做的是当球进入口袋时更改球的切割面罩位,这样它就不会碰到其他球(我不想删除物理对象因为我需要做之前的一些影响。)

碰撞掩模位似乎改变得很好,但它立刻没有生效,并且在完全无法控制之前,袋装的球仍然存在一段时间。

我不知道为什么,是否真的可以在运行时更改掩码位?

谢谢。

1 个答案:

答案 0 :(得分:0)

当两个灯具彼此靠近时(特别是当它们的AABB开始重叠时),会创建一个b2Contact来管理它们之间的交互。碰撞的相关数据(摩擦,恢复等)被复制到这个b2Contact中,它会一直存在,直到AABB停止重叠。这样做是为了提高效率,但副作用是只要两个AABB保持重叠,就不再检查冲突掩码位。

解决此问题的一种方法是通过在PreSolve回调中调用contact-> SetEnabled(false)来手动取消默认的碰撞响应,以解决与装袋球的任何碰撞。每次进行PreSolve调用时都需要这样做。