2

所以我对 Box2D 很陌生,我正在尝试弄清楚如何使用 b2ContactListener。

您是否允许为一个世界设置多个 Contact Listeners?我会这么认为。但是当像这样设置两个联系人监听器时:

world.SetContactListener(listener);
world.SetContactListener(listener2);

它的行为就像listener2是唯一的一组。这是为什么?另外,当我更改设置侦听器的顺序时,如下所示:

world.SetContactListener(listener2);
world.SetContactListener(listener);

然后它的行为就像listener是唯一的联系侦听器集并忽略listener2

我认为为什么会出现这种行为的唯一原因是因为两个侦听器都覆盖了BeginContactandEndContact方法,所以它很困惑。

顺便说一下,我正在使用 Box2D (Box2DWeb) 的 JavaScript 端口。但是,如果您知道 Objective-C 或 C++ 中问题的解决方案,那很好,因为我知道这些语言。

4

1 回答 1

3

提示在名称中 - “设置”而不是“添加”。这意味着仅支持 1 个侦听器。如果需要,更新您的侦听器类以分派到多个方法。

您似乎对覆盖方法的含义感到困惑。在多个对象上覆盖相同的方法不会导致任何混淆。问题是一次只能注册一个监听器(因为有很多监听器会减慢速度 - 它会被调用很多)

于 2012-04-16T10:14:26.730 回答