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从另一个线程调用 - 不。通常你是Stepupdate你的层的方法调用的。并且cocos不是多线程的。所以保证不会调用任何东西,直到update它下面的调用堆栈被弹出

于 2013-06-11T15:09:58.763 回答