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

Cocos2d-x 遊戲邏輯:敵人全滅自動切換勝利場景的兩種實現

     編輯:程式設計綜合問答

場景需求

橫版格鬥遊戲,所有敵人被消滅後自動跳轉到勝利場景。

方案一:全局計數器(最簡單)

// 全局變量或單例管理器
int g_enemyCount = 0;

// 生成敵人時
void spawnEnemy() {
    g_enemyCount++;
    // ...
}

// 敵人死亡回調
void onEnemyDead() {
    g_enemyCount--;
    if (g_enemyCount <= 0) {
        Director::getInstance()->replaceScene(VictoryScene::createScene());
    }
}

優點:代碼極少,無額外數據結構。
缺點:全局狀態難測試,多場景切換時需手動重置。

方案二:容器管理(推薦)

// 在遊戲層或專門的 EnemyManager 中
std::vector _enemies; // 或 Vector

// 添加敵人
void addEnemy(Enemy* e) {
    _enemies.pushBack(e);
    this->addChild(e);
}

// 死亡移除
void removeEnemy(Enemy* e) {
    auto it = std::find(_enemies.begin(), _enemies.end(), e);
    if (it != _enemies.end()) {
        _enemies.erase(it);
        e->removeFromParent();
        checkVictory();
    }
}

void checkVictory() {
    if (_enemies.empty()) {
        Director::getInstance()->replaceScene(TransitionFade::create(1.0f, VictoryScene::createScene()));
    }
}

優點:擁有所有敵人引用,可批量操作(如暫停、加速),便於擴展「精英敵人存活判定」等邏輯。
缺點:略增內存開銷,需注意移除時機避免野指針。

進階:事件總線解耦

// 使用 EventDispatcher
_eventDispatcher->addCustomEventListener("ENEMY_DEAD", [this](EventCustom*){
    checkVictory();
});

// 敵人死亡時派發
_eventDispatcher->dispatchCustomEvent("ENEMY_DEAD");

適合大型項目,敵人類不直接依賴管理器。

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