0

Salut,我目前正在使用 box2d 进行 Flash 中的台球游戏,我被碰撞过滤所困。

我尝试做的是在球进入口袋时更改球的碰撞掩码位,这样它就不会碰撞其他球(我不想删除物理对象,因为我需要先做一些效果)。

碰撞掩码位似乎更改得很好,但它不会立即生效,因为袋装球在完全不可碰撞之前仍然会碰撞一段时间。

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

谢谢你。

4

1 回答 1

0

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

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

于 2012-06-15T05:04:14.723 回答