在角色**死亡動畫結束的回調**中執行場景切換,確保視覺完整性。
CallFunc 回調// 假設 role 是 Sprite,死後播放動畫
auto dieAnimate = Animate::create(dieAnimation);
auto callFunc = CallFunc::create([=]() {
// 動畫結束後切場景
auto nextScene = GameOverScene::createScene();
Director::getInstance()->replaceScene(TransitionFade::create(1.0f, nextScene));
});
auto seq = Sequence::create(dieAnimate, callFunc, nullptr);
role->runAction(seq);
void onContactBegin(PhysicsContact& contact) {
if (isHeroDie(contact)) {
hero->stopAllActions();
auto dieAnimate = Animate::create(dieAnimation);
auto callFunc = CallFunc::create([=]() {
Director::getInstance()->replaceScene(GameOverScene::createScene());
});
hero->runAction(Sequence::create(dieAnimate, callFunc, nullptr));
}
}
TransitionFade:淡入淡出,最通用。TransitionMoveInL/R/T/B:滑入效果。TransitionPageTurn:翻頁效果。update(float dt) 中直接 replaceScene → 可能導致當幀還在渲染舊場景,引發崩潰。**一定要在 Action 回調或下一幀執行**。replaceScene 會自動 cleanup 舊場景,但自定義單例/靜態資源需手動釋放。bool isDead 防重入。cpp-tests/Classes/SceneTest/SceneTest.cpp死亡動畫 + CallFunc 回調 + replaceScene(Transition...) 是標準模式。保證動畫播完再切場景,體驗最順滑。