橫版格鬥遊戲,所有敵人被消滅後自動跳轉到勝利場景。
// 全局變量或單例管理器
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");
適合大型項目,敵人類不直接依賴管理器。