2

したがって、私は Box2D を初めて使用し、b2ContactListener の使用方法を理解しようとしています。

1 つのワールドに複数のコンタクト リスナーを設定できますか? そう思うでしょう。しかし、次のように 2 つの連絡先リスナーを設定すると、次のようになります。

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

listener2唯一のセットのように動作します。何故ですか?また、リスナーを次のように設定する順序を変更すると、次のようになります。

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

次にlistener、唯一の連絡先リスナー セットであるかのように動作し、 を無視しlistener2ます。

なぜこれがこのように振る舞うのかと思う唯一の理由は、両方のリスナーがメソッドBeginContactEndContactメソッドをオーバーライドするため、混乱しているためです。

ちなみにBox2D(Box2DWeb)のJavaScriptポートを使用しています。しかし、Objective-C または C++ の問題に対する解決策を知っていれば、私はそれらの言語を知っているので問題ありません。

4

1 に答える 1

3

ヒントは名前にあります-「追加」ではなく「設定」。これは、サポートされているリスナーが1つだけであることを意味します。必要に応じて、リスナークラスを更新して複数のメソッドにディスパッチします。

メソッドのオーバーライドが何を伴うのかについて混乱しているようです。複数のオブジェクトで同じメソッドをオーバーライドしても、混乱することはありません。問題は、一度に登録することを意図したリスナーが1つしかないことです(リスナーが多数あると処理速度が低下するため、多くのリスナーが呼び出されます)

于 2012-04-16T10:14:26.730 に答える