我有一个关于如何将粒子发射器实现到预先存在的暂停、恢复和重新启动框架的问题。
现在我有一个包含以下代码的暂停方法:
void GamePlayLayer::pause()
{
//pauses/resumes game mechanics
if(!isPaused){
pauseSchedulerAndActions();
isPaused = true;
cout << "\npaused game... isPaused = " << isPaused;
}else{
resume();
}
//pauses/resumes particle emitters
CCParticleSystemQuad* runner_emitter = runner.getExistingEmitter();
if(runner_emitter != NULL){
if(!isPaused){
runner_emitter->pauseSchedulerAndActions();
}else{
runner_emitter->resumeSchedulerAndActions();
}
}
}
我还有一个使用以下内容创建的粒子发射器:
CCParticleSystemQuad* Runner::getNewEmitter()
{
p_emitter = CCParticleSystemQuad::create("emitter_runner.plist");
//position is relative to the point we add it to -- use this so it follows the sprite when the runner moves
p_emitter->setPositionType(kCCPositionTypeRelative);
updateEmitterPosition();
p_emitter->retain();
//so we dont get extra emitters sticking around in the scene
p_emitter->setAutoRemoveOnFinish(true);
cout <<endl << "Emitter sent";
return p_emitter;
}
所讨论的粒子发射器具有与之相关的持续时间,比如说 2 秒。现在,我希望我的暂停方法冻结粒子系统,这样当我取消暂停时,粒子发射器会从它停止的地方继续。
我现在遇到的问题是,当我暂停时,粒子发射器会继续。“pauseSchedulerAndActions()”方法与粒子发射器分离,据我所知,粒子发射器有自己的调度器。
无论我尝试什么,我都无法阻止粒子发射器继续在 p_emitter.setDuration() 方法中设置的时间移动。
这是有问题的,因为如果我在粒子发射器尚未达到其持续时间时暂停,那么当我取消暂停时,持续时间已到并且它已被删除,因为我设置了这个标志:
p_emitter->setAutoRemoveOnFinish(true);
创建发射器时。此外,发射器实际上从未暂停,因此它给人的印象是游戏实际上并未暂停。
所以我的问题是,我如何完全冻结粒子发射器,以使发射器在我取消暂停时恢复?