1

私は box2d と cocos2d-x を使用してゲームに取り組んでおり、オーバーデザインする前に詳細を確認したい: TouchDispatcher によって呼び出されるコールバック (ccTouchesBegan、ccTouchesEnded、ccTouchesMoved など) が Box2d の世界の実行を中断する可能性はありますか?ステップ?たとえば、私の ccTouchesEnded コールバックが次の行に沿っていたとします。

void GameLayer::ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event)
{
    world->DestroyBody(myBody);//obviously an oversimplification but you get the idea
}

...これがワールド ステップの実行中に誤って呼び出され、ワー​​ルド ステップが現在処理しているものを削除する可能性はありますか?

調べてみた...

Box2D とラップワールド

...そして、いくつかが干渉する可能性があることを見てきましたが、これが議論されるたびに出てくるのはContactListenerだけであり、それは特別なケースか何かであるという印象を私に残します. コールバックは干渉できますか? それとも、ワールド ステップは外部 (非 box2d) スレッドに対してアトミックですか?

PS。与えられたサンプル コードが MVC の設計哲学に完全に準拠していないことは理解しています。正直なところ、それを変更することを検討しています (ただし、プロジェクトの状態を考えると、多くの遅延が発生します)。私自身の参考のためだけでも、ワールドステップがどれほど原子的であるかについてもっと知りたい.

前もって感謝します

4

1 に答える 1

1

Step別のスレッドから自分で呼び出さない限り、いいえ。通常、レイヤーのメソッドStepから呼び出していupdateます。マルチcocosスレッドではありません。updateしたがって、その下のコールスタックがポップされるまで、何も呼び出されないことが保証されます

于 2013-06-11T15:09:58.763 に答える