首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Cocos2d-x ActionManager 動作管理完整教學

     編輯:C++ 入門

前言

Cocos2d-x 中的 ActionManager 統一管理節點上的所有動作(Action),提供暫停、繼續、停止特定動作、延遲執行等進階控制。本文透過實例詳解核心用法。

一、停止所有動作

節點本身提供 stopAllActions(),會立即停止該節點上目前正在執行的所有動作,但不影響後續新增的動作。

node->stopAllActions(); // 停止現有動作
node->runAction(ScaleTo::create(2, 2)); // 此動作正常執行

二、延遲執行動作

無直接 API 實現「延遲 N 秒執行某動作」,可結合 schedule 與 pauseTarget/resumeTarget 達成:

  1. 先建立動作並加入 ActionManager,但以 pauseTarget 暫停該節點。
  2. 使用 schedule 設定定時器,時間到時呼叫 resumeTarget 並取消定時器。
auto action = MoveBy::create(1, Vec2(150,0));
director->getActionManager()->addAction(action, grossini, true); // true 表示不自動啟動
schedule(schedule_selector(PauseTest::unpause), 3); // 3 秒後觸發 unpause

void PauseTest::unpause(float dt) {
    unschedule(schedule_selector(PauseTest::unpause));
    auto node = getChildByTag(98);
    director->getActionManager()->resumeTarget(node); // 開始執行動作
}

三、停止特定動作

給動作設定 tag,再透過 stopActionByTag(tag) 精準停止。

auto pSequence = Sequence::create(pMove, pCallback, nullptr);
pSequence->setTag(kTagSequence); // 設定 tag
pChild->runAction(pSequence);

// 稍後停止
sprite->stopActionByTag(kTagSequence);

四、暫停與繼續節點動作

pauseTarget(node) 暫停節點上所有動作(含未完成與後續新增),resumeTarget(node) 繼續執行。實測:pauseTarget 後再 runAction,新動作也不會立即執行,需 resumeTarget 後才會一併運行。

director->getActionManager()->pauseTarget(pGrossini); // 暫停
pGrossini->runAction(RotateBy::create(2, 360)); // 此動作暫緩執行
schedule(schedule_selector(ResumeTest::resumeGrossini), 3.0f);

void ResumeTest::resumeGrossini(float dt) {
    unschedule(schedule_selector(ResumeTest::resumeGrossini));
    director->getActionManager()->resumeTarget(pGrossini); // 所有動作恢復執行
}

總結

掌握 ActionManager 可實現精細的動作控制:stopAllActions 清場、tag 精準刪除、pause/resumeTarget 實現延遲與暫停續傳,是遊戲邏輯開發的關鍵工具。

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