首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Cocos2d-x 角色死亡後自動切換場景:回調函數實現

     編輯:程式設計綜合問答

核心思路

在角色**死亡動畫結束的回調**中執行場景切換,確保視覺完整性。

實現步驟

1. 死亡動作使用 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);

2. 若用物理引擎/碰撞檢測觸發死亡

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));
    }
}

3. 場景切換特效推薦

  • TransitionFade:淡入淡出,最通用。
  • TransitionMoveInL/R/T/B:滑入效果。
  • TransitionPageTurn:翻頁效果。

常見坑

  • 在 update(float dt) 中直接 replaceScene → 可能導致當幀還在渲染舊場景,引發崩潰。**一定要在 Action 回調或下一幀執行**。
  • 忘記釋放舊場景資源 → 記憶體洩漏。replaceScene 會自動 cleanup 舊場景,但自定義單例/靜態資源需手動釋放。
  • 死亡判定多次觸發 → 加 bool isDead 防重入。

參考資源

總結

死亡動畫 + CallFunc 回調 + replaceScene(Transition...) 是標準模式。保證動畫播完再切場景,體驗最順滑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved