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

Cocos2d-x 場景間傳遞資料:使用 NotificationCenter 發布訂閱模式

     編輯:程式設計綜合問答

場景

從 MenuScene 切換到 HelloWorldScene 時,需傳遞一個整數參數(如關卡編號)。

方案:CCNotificationCenter(Cocos2d-x) / NSNotificationCenter(Cocos2d-iOS)

觀察者模式,解耦發送者與接收者,跨場景、跨層級皆可用。

發送端(MenuScene)

// Cocos2d-x C++
auto eventDispatcher = Director::getInstance()->getEventDispatcher();
// 或使用 NotificationCenter
NotificationCenter::getInstance()->postNotification("LEVEL_SELECTED", __Integer::create(3));

// 切換場景
Director::getInstance()->replaceScene(HelloWorldScene::createScene());

接收端(HelloWorldScene)

// 在 init 或 onEnter 註冊
NotificationCenter::getInstance()->addObserver(this,
    [this](Ref* sender) {
        auto num = dynamic_cast<__Integer*>(sender);
        if (num) {
            currentLevel = num->getValue();
            initLevel(currentLevel);
        }
    },
    "LEVEL_SELECTED", nullptr);

// 在 onExit 移除觀察者(防止洩漏)
NotificationCenter::getInstance()->removeObserver(this, "LEVEL_SELECTED");

其他常用方案對比

方案優點缺點適用場景
NotificationCenter解耦、一對多、跨場景隱性依賴、難追蹤事件通知、解鎖成就、設定變更
Singleton 模型類集中管理、型別安全全域狀態、測試難玩家資料、遊戲設定、關卡進度
Scene 建構式傳參明確、編譯期檢查需修改 createScene 簽名關卡編號、角色選擇等核心參數
UserDefault 持久化跨啟動保留I/O 延遲、非即時音量、語言、教學完成標記

建議

核心遊戲參數(關卡、角色)用 **Scene 建構式傳參** 最清晰;UI 事件、成就解鎖、設定同步用 **NotificationCenter**;長期保留用 **UserDefault**。

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