我在 Cocos2dx-3.8 中遇到了类似的问题,试图在我正在开发的 Scene 中安排一个选择器。
我的故障代码是:
void GameScene::onEnter() {
this->scheduleOnce(CC_SCHEDULE_SELECTOR(GameScene::scheduledSelector), 3.0);
this->scheduleUpdate();
}
void GameScene::scheduledSelector(float dt) {
log("Scheduled selector called...");
}
void GameScene::update(float delta) {
log("update called...");
}
scheduledSelector 和 update 在这种情况下都没有被调用。
我在 Cocos2dx Node 文档中找到了我的问题的解决方案:Node 的调度程序在 Node 调用其 resume 方法之前不会开始调度更新:
/**
* Resumes all scheduled selectors, actions and event listeners.
* This method is called internally by onEnter.
*/
virtual void resume(void);
我的坏处是我重写了 Node 的 onEnter 方法而没有调用超类实现,所以调度程序从来没有收到开始更新的信号。修复我的 onEnter 方法:
void GameScene::onEnter() {
Node::onEnter();
this->scheduleOnce(CC_SCHEDULE_SELECTOR(GameScene::scheduledSelector), 3.0);
this->scheduleUpdate();
}
完成了这项工作,两个选择器在正确的时间开始被调用。