2012-04-12 6 views
2

私はBox2Dの新機能で、b2ContactListenerの使い方を理解しようとしています。Box2D:複数のb2ContactListenerをワールドに設定していますか? - 変な振る舞いを取得する

複数の連絡先リスナーをワールドに設定することは許可されていますか?私はそう思うだろう。そのような二つの接触のリスナーを設定するときしかし:

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

listener2は一組だけだったように動作します。何故ですか? listenerが唯一の接点リスナーが設定したと listener2を無視するように

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

が、それは動作します。 はまた、私は、私はそうのようにリスナーを設定する方法の順序を変更する場合。

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

私は途中でBox2D(Box2DWeb)のJavaScriptポートを使用しています。しかし、Objective-CやC++の問題の解決法を知っていれば、それらの言語を知っていても問題ありません。

答えて

3

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

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

関連する問題