在Cocos2d-X中,TouchDispatcher可以干扰Box2d的世界步骤吗?

时间:2013-06-11 14:33:27

标签: box2d cocos2d-x

我正在使用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 and wrapping worlds

...而且我已经看到有些人可能会干涉,但是在讨论这个问题时唯一出现的问题是ContactListener,让我觉得这是一个特殊的情况。任何回调都可以干扰吗?或者世界步骤是原子到外部(非box2d)线程?

PS。我理解给出的示例代码并不完全符合MVC设计理念,说实话我正在考虑改变它(虽然考虑到项目所处的状态会导致很多延迟),但即便如此我我仍然想更多地了解世界步骤的确切原理,即使只是为了我自己的参考。

提前致谢

1 个答案:

答案 0 :(得分:1)

除非你自己不从另一个线程中调用Step - 否则。通常,您是从图层的Step方法调用update。并且cocos不是多线程的。因此,保证在update之前不会调用任何内容,并且弹出它下面的callstack