我有一個關於如何在預先存在的暫停,恢復和重新啓動框架中實現粒子發射器的問題。Cocos2d/Cocos2d-x粒子系統暫停
現在我有包括該代碼的暫停方法:
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);
時創建發射器。此外,發射器從來沒有實際停頓,所以它給人的印象是遊戲實際上並沒有停頓。
所以我的問題是,我如何完全凍結粒子發射器的方式,允許發射器恢復時,我不停頓?