From 65494fb0e3587f612b2277c747510cdbc3ad5a86 Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Fri, 6 Oct 2017 02:32:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=80=80=E5=87=BA?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E6=97=B6=E4=BB=8D=E6=89=A7=E8=A1=8C=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=99=A8=E3=80=81=E7=9B=91=E5=90=AC=E5=99=A8=E3=80=81?= =?UTF-8?q?=E5=8A=A8=E7=94=BB=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Easy2D/Action/Action.cpp | 3 ++- Easy2D/Action/ActionFrames.cpp | 2 +- Easy2D/Action/ActionMoveBy.cpp | 4 +-- Easy2D/Action/ActionNeverStop.cpp | 2 +- Easy2D/Action/ActionOpacityBy.cpp | 4 +-- Easy2D/Action/ActionScaleBy.cpp | 6 ++--- Easy2D/Action/ActionSequence.cpp | 2 +- Easy2D/Action/ActionTwo.cpp | 4 +-- Easy2D/Base/App.cpp | 43 +++++++++++++++++------------- Easy2D/Base/Scene.cpp | 10 +++++++ Easy2D/Msg/KeyMsg.cpp | 36 ++++++++++++++++++++++--- Easy2D/Msg/MouseMsg.cpp | 40 +++++++++++++++++++++++++--- Easy2D/Object/Sprite.cpp | 2 +- Easy2D/Tool/ActionManager.cpp | 31 +++++++++++++++++++--- Easy2D/Tool/Timer.cpp | 44 ++++++++++++++++++++++++------- Easy2D/easy2d.h | 30 +++++++++++++++++---- 16 files changed, 205 insertions(+), 58 deletions(-) diff --git a/Easy2D/Action/Action.cpp b/Easy2D/Action/Action.cpp index d2c008d3..81f1b4ac 100644 --- a/Easy2D/Action/Action.cpp +++ b/Easy2D/Action/Action.cpp @@ -4,7 +4,8 @@ Action::Action() : m_bRunning(true), m_bStop(false), - m_pParent(nullptr) + m_pTargetSprite(nullptr), + m_pParentScene(nullptr) { // 默认动作 15ms 运行一次 setInterval(15); diff --git a/Easy2D/Action/ActionFrames.cpp b/Easy2D/Action/ActionFrames.cpp index aac762a0..5b2a561f 100644 --- a/Easy2D/Action/ActionFrames.cpp +++ b/Easy2D/Action/ActionFrames.cpp @@ -37,7 +37,7 @@ bool ActionFrames::_exec(LARGE_INTEGER nNow) { // 用求余的方法重新记录时间 m_nLast.QuadPart = nNow.QuadPart - (nNow.QuadPart % m_nAnimationInterval.QuadPart); - m_pParent->setImage(m_vFrames[m_nFrameIndex]); + m_pTargetSprite->setImage(m_vFrames[m_nFrameIndex]); m_nFrameIndex++; // 判断动作是否结束 if (m_nFrameIndex == m_vFrames.size()) diff --git a/Easy2D/Action/ActionMoveBy.cpp b/Easy2D/Action/ActionMoveBy.cpp index 62845117..3231d8de 100644 --- a/Easy2D/Action/ActionMoveBy.cpp +++ b/Easy2D/Action/ActionMoveBy.cpp @@ -13,7 +13,7 @@ ActionMoveBy::~ActionMoveBy() void ActionMoveBy::_init() { Animation::_init(); - m_BeginPos = m_pParent->getPos(); + m_BeginPos = m_pTargetSprite->getPos(); } bool ActionMoveBy::_exec(LARGE_INTEGER nNow) @@ -26,7 +26,7 @@ bool ActionMoveBy::_exec(LARGE_INTEGER nNow) // 计算移动位置 float scale = float(m_nDuration) / m_nTotalDuration; // 移动 Sprite - m_pParent->setPos(int(m_BeginPos.x + m_MoveVector.x * scale), + m_pTargetSprite->setPos(int(m_BeginPos.x + m_MoveVector.x * scale), int(m_BeginPos.y + m_MoveVector.y * scale)); // 判断动作是否结束 if (_isEnd()) diff --git a/Easy2D/Action/ActionNeverStop.cpp b/Easy2D/Action/ActionNeverStop.cpp index 746aa0dc..b42fd5ba 100644 --- a/Easy2D/Action/ActionNeverStop.cpp +++ b/Easy2D/Action/ActionNeverStop.cpp @@ -18,7 +18,7 @@ ActionNeverStop * ActionNeverStop::copy() const void ActionNeverStop::_init() { - m_Action->m_pParent = m_pParent; + m_Action->m_pTargetSprite = m_pTargetSprite; m_Action->_init(); } diff --git a/Easy2D/Action/ActionOpacityBy.cpp b/Easy2D/Action/ActionOpacityBy.cpp index cfaea704..47c4a83c 100644 --- a/Easy2D/Action/ActionOpacityBy.cpp +++ b/Easy2D/Action/ActionOpacityBy.cpp @@ -13,7 +13,7 @@ ActionOpacityBy::~ActionOpacityBy() void ActionOpacityBy::_init() { Animation::_init(); - m_nBeginVal = m_pParent->getOpacity(); + m_nBeginVal = m_pTargetSprite->getOpacity(); } bool ActionOpacityBy::_exec(LARGE_INTEGER nNow) @@ -26,7 +26,7 @@ bool ActionOpacityBy::_exec(LARGE_INTEGER nNow) // 计算移动位置 float scale = float(m_nDuration) / m_nTotalDuration; // 移动 Sprite - m_pParent->setOpacity(m_nBeginVal + m_nVariation * scale); + m_pTargetSprite->setOpacity(m_nBeginVal + m_nVariation * scale); // 判断动作是否结束 if (_isEnd()) { diff --git a/Easy2D/Action/ActionScaleBy.cpp b/Easy2D/Action/ActionScaleBy.cpp index 689b1d7b..d02338dd 100644 --- a/Easy2D/Action/ActionScaleBy.cpp +++ b/Easy2D/Action/ActionScaleBy.cpp @@ -14,8 +14,8 @@ ActionScaleBy::~ActionScaleBy() void ActionScaleBy::_init() { Animation::_init(); - m_nBeginScaleX = m_pParent->getScaleX(); - m_nBeginScaleY = m_pParent->getScaleY(); + m_nBeginScaleX = m_pTargetSprite->getScaleX(); + m_nBeginScaleY = m_pTargetSprite->getScaleY(); } bool ActionScaleBy::_exec(LARGE_INTEGER nNow) @@ -28,7 +28,7 @@ bool ActionScaleBy::_exec(LARGE_INTEGER nNow) // 计算移动位置 float scale = float(m_nDuration) / m_nTotalDuration; // 移动 Sprite - m_pParent->setScale(m_nBeginScaleX + m_nVariationX * scale, m_nBeginScaleX + m_nVariationX * scale); + m_pTargetSprite->setScale(m_nBeginScaleX + m_nVariationX * scale, m_nBeginScaleX + m_nVariationX * scale); // 判断动作是否结束 if (_isEnd()) { diff --git a/Easy2D/Action/ActionSequence.cpp b/Easy2D/Action/ActionSequence.cpp index ffd7cf2a..86169530 100644 --- a/Easy2D/Action/ActionSequence.cpp +++ b/Easy2D/Action/ActionSequence.cpp @@ -33,7 +33,7 @@ void ActionSequence::_init() { for (auto action : m_vActions) { - action->m_pParent = m_pParent; + action->m_pTargetSprite = m_pTargetSprite; } m_vActions[0]->_init(); } diff --git a/Easy2D/Action/ActionTwo.cpp b/Easy2D/Action/ActionTwo.cpp index 4bdb1fcc..863e77e0 100644 --- a/Easy2D/Action/ActionTwo.cpp +++ b/Easy2D/Action/ActionTwo.cpp @@ -34,8 +34,8 @@ ActionTwo * ActionTwo::reverse(bool actionReverse) const void ActionTwo::_init() { - m_FirstAction->m_pParent = m_pParent; - m_SecondAction->m_pParent = m_pParent; + m_FirstAction->m_pTargetSprite = m_pTargetSprite; + m_SecondAction->m_pTargetSprite = m_pTargetSprite; m_FirstAction->_init(); } diff --git a/Easy2D/Base/App.cpp b/Easy2D/Base/App.cpp index a4a8b963..9dd657c9 100644 --- a/Easy2D/Base/App.cpp +++ b/Easy2D/Base/App.cpp @@ -14,8 +14,8 @@ static int originX = 0; static int originY = 0; App::App() : - m_CurrentScene(nullptr), - m_NextScene(nullptr), + m_pCurrentScene(nullptr), + m_pNextScene(nullptr), m_bRunning(false), m_nWindowMode(0) { @@ -152,23 +152,23 @@ void App::_initGraph() void App::_mainLoop() { // 下一场景指针不为空时,切换场景 - if (m_NextScene) + if (m_pNextScene) { // 执行当前场景的 onExit 函数 - if (m_CurrentScene) + if (m_pCurrentScene) { - m_CurrentScene->onExit(); + m_pCurrentScene->onExit(); } // 进入下一场景 _enterNextScene(); // 执行当前场景的 onEnter 函数 - m_CurrentScene->onEnter(); + m_pCurrentScene->onEnter(); } // 断言当前场景非空 - assert(m_CurrentScene); + assert(m_pCurrentScene); cleardevice(); // 清空画面 - m_CurrentScene->_onDraw(); // 绘制当前场景 + m_pCurrentScene->_onDraw(); // 绘制当前场景 FlushBatchDraw(); // 刷新画面 // 其他执行程序 @@ -267,7 +267,7 @@ void App::close() void App::enterScene(Scene * scene, bool save) { // 保存下一场景的指针 - s_pInstance->m_NextScene = scene; + s_pInstance->m_pNextScene = scene; // 切换场景时,是否保存当前场景 s_pInstance->m_bSaveScene = save; } @@ -275,7 +275,7 @@ void App::enterScene(Scene * scene, bool save) void App::backScene() { // 从栈顶取出场景指针,作为下一场景 - s_pInstance->m_NextScene = s_pInstance->m_SceneStack.top(); + s_pInstance->m_pNextScene = s_pInstance->m_SceneStack.top(); // 不保存当前场景 s_pInstance->m_bSaveScene = false; } @@ -309,22 +309,22 @@ void App::setBkColor(COLORREF color) void App::_enterNextScene() { // 若下一场景处于栈顶,说明正在返回上一场景 - if (m_SceneStack.size() && m_NextScene == m_SceneStack.top()) + if (m_SceneStack.size() && m_pNextScene == m_SceneStack.top()) { m_SceneStack.pop(); // 删除栈顶场景 } if (m_bSaveScene) { - m_SceneStack.push(m_CurrentScene); // 若要保存当前场景,把它的指针放到栈顶 + m_SceneStack.push(m_pCurrentScene); // 若要保存当前场景,把它的指针放到栈顶 } else { - SafeDelete(m_CurrentScene); // 删除当前场景 + SafeDelete(m_pCurrentScene); // 删除当前场景 } - m_CurrentScene = m_NextScene; // 切换场景 - m_NextScene = nullptr; // 下一场景置空 + m_pCurrentScene = m_pNextScene; // 切换场景 + m_pNextScene = nullptr; // 下一场景置空 } void App::quit() @@ -348,7 +348,14 @@ void App::reset() Scene * App::getCurrentScene() { // 获取当前场景的指针 - return s_pInstance->m_CurrentScene; + if (s_pInstance->m_pCurrentScene) + { + return s_pInstance->m_pCurrentScene; + } + else + { + return s_pInstance->m_pNextScene; + } } void App::setFPS(DWORD fps) @@ -372,8 +379,8 @@ int App::getHeight() void App::free() { // 释放场景内存 - SafeDelete(m_CurrentScene); - SafeDelete(m_NextScene); + SafeDelete(m_pCurrentScene); + SafeDelete(m_pNextScene); // 清空场景栈 while (m_SceneStack.size()) { diff --git a/Easy2D/Base/Scene.cpp b/Easy2D/Base/Scene.cpp index f16b175b..e95da47f 100644 --- a/Easy2D/Base/Scene.cpp +++ b/Easy2D/Base/Scene.cpp @@ -37,10 +37,20 @@ void Scene::_onDraw() void Scene::onEnter() { + // 将定时器与当前场景绑定 + Timer::bindTimersWithScene(this); + MouseMsg::bindListenersWithScene(this); + KeyMsg::bindListenersWithScene(this); + ActionManager::bindActionsWithScene(this); } void Scene::onExit() { + // 停止当前场景上运行的所有定时器 + Timer::stopAllSceneTimers(this); + MouseMsg::clearAllSceneListeners(this); + KeyMsg::clearAllSceneListeners(this); + ActionManager::stopAllSceneActions(this); } void Scene::add(Node * child, int zOrder) diff --git a/Easy2D/Msg/KeyMsg.cpp b/Easy2D/Msg/KeyMsg.cpp index 67a041c2..a41a98cf 100644 --- a/Easy2D/Msg/KeyMsg.cpp +++ b/Easy2D/Msg/KeyMsg.cpp @@ -80,10 +80,11 @@ const VK_KEY KeyMsg::F12 = VK_F12; static VK_KEY convert(int ascii); -KeyMsg::KeyMsg(TString name, const KEY_CALLBACK & callback) +KeyMsg::KeyMsg(TString name, const KEY_CALLBACK & callback) : + m_sName(name), + m_callback(callback), + m_pParentScene(nullptr) { - m_sName = name; - m_callback = callback; } KeyMsg::~KeyMsg() @@ -112,6 +113,7 @@ void KeyMsg::addListener(TString name, const KEY_CALLBACK & callback) { // 创建新的监听对象 auto key = new KeyMsg(name, callback); + key->m_pParentScene = App::getCurrentScene(); // 添加新的按键回调函数 s_vKeyMsg.push_back(key); } @@ -136,6 +138,34 @@ bool KeyMsg::delListener(TString name) return false; } +void KeyMsg::bindListenersWithScene(Scene * scene) +{ + for (auto k : s_vKeyMsg) + { + if (!k->m_pParentScene) + { + k->m_pParentScene = App::getCurrentScene(); + } + } +} + +void KeyMsg::clearAllSceneListeners(Scene * scene) +{ + // 创建迭代器 + std::vector::iterator iter; + // 循环遍历所有监听器 + for (iter = s_vKeyMsg.begin(); iter != s_vKeyMsg.end(); iter++) + { + // 查找相同名称的监听器 + if ((*iter)->m_pParentScene == scene) + { + // 删除该定时器 + delete (*iter); + s_vKeyMsg.erase(iter); + } + } +} + void KeyMsg::clearAllListeners() { // 删除所有监听器 diff --git a/Easy2D/Msg/MouseMsg.cpp b/Easy2D/Msg/MouseMsg.cpp index d366b936..baeed71d 100644 --- a/Easy2D/Msg/MouseMsg.cpp +++ b/Easy2D/Msg/MouseMsg.cpp @@ -24,14 +24,17 @@ void MouseMsg::__exec() } } -MouseMsg::MouseMsg() +MouseMsg::MouseMsg() : + m_callback([]() {}), + m_pParentScene(nullptr) { } -MouseMsg::MouseMsg(TString name, const MOUSE_CALLBACK & callback) +MouseMsg::MouseMsg(TString name, const MOUSE_CALLBACK & callback) : + m_sName(name), + m_callback(callback), + m_pParentScene(nullptr) { - m_sName = name; - m_callback = callback; } MouseMsg::~MouseMsg() @@ -47,6 +50,7 @@ void MouseMsg::addListener(TString name, const MOUSE_CALLBACK & callback) { // 创建新的监听对象 auto mouse = new MouseMsg(name, callback); + mouse->m_pParentScene = App::getCurrentScene(); // 添加新的按键回调函数 s_vMouseMsg.push_back(mouse); } @@ -71,6 +75,34 @@ bool MouseMsg::delListener(TString name) return false; } +void MouseMsg::bindListenersWithScene(Scene * scene) +{ + for (auto m : s_vMouseMsg) + { + if (!m->m_pParentScene) + { + m->m_pParentScene = App::getCurrentScene(); + } + } +} + +void MouseMsg::clearAllSceneListeners(Scene * scene) +{ + // 创建迭代器 + std::vector::iterator iter; + // 循环遍历所有监听器 + for (iter = s_vMouseMsg.begin(); iter != s_vMouseMsg.end(); iter++) + { + // 查找相同名称的监听器 + if ((*iter)->m_pParentScene == scene) + { + // 删除该定时器 + delete (*iter); + s_vMouseMsg.erase(iter); + } + } +} + void MouseMsg::clearAllListeners() { // 删除所有监听器 diff --git a/Easy2D/Object/Sprite.cpp b/Easy2D/Object/Sprite.cpp index 46c660b2..79fc3562 100644 --- a/Easy2D/Object/Sprite.cpp +++ b/Easy2D/Object/Sprite.cpp @@ -68,7 +68,7 @@ void Sprite::addAction(Action * action) if (action) { // 将动作与 Sprite 绑定 - action->m_pParent = this; + action->m_pTargetSprite = this; // 将动作加入动作管理器,管理器会处理这个动作 ActionManager::addAction(action); } diff --git a/Easy2D/Tool/ActionManager.cpp b/Easy2D/Tool/ActionManager.cpp index 13fb6297..bea8bfeb 100644 --- a/Easy2D/Tool/ActionManager.cpp +++ b/Easy2D/Tool/ActionManager.cpp @@ -31,8 +31,31 @@ void ActionManager::addAction(Action * action) assert(a != action); } #endif - s_vActions.push_back(action); + action->m_pParentScene = App::getCurrentScene(); action->_init(); + s_vActions.push_back(action); + } +} + +void ActionManager::bindActionsWithScene(Scene * scene) +{ + for (auto action : s_vActions) + { + if (!action->m_pParentScene) + { + action->m_pParentScene = App::getCurrentScene(); + } + } +} + +void ActionManager::stopAllSceneActions(Scene * scene) +{ + for (auto action : s_vActions) + { + if (action->m_pParentScene == scene) + { + action->stop(); + } } } @@ -83,7 +106,7 @@ void ActionManager::resumeSpriteAllActions(Sprite * sprite) { for (auto action : s_vActions) { - if (action->m_pParent == sprite) + if (action->m_pTargetSprite == sprite) { action->resume(); } @@ -94,7 +117,7 @@ void ActionManager::pauseSpriteAllActions(Sprite * sprite) { for (auto action : s_vActions) { - if (action->m_pParent == sprite) + if (action->m_pTargetSprite == sprite) { action->pause(); } @@ -105,7 +128,7 @@ void ActionManager::stopSpriteAllActions(Sprite * sprite) { for (auto action : s_vActions) { - if (action->m_pParent == sprite) + if (action->m_pTargetSprite == sprite) { action->stop(); } diff --git a/Easy2D/Tool/Timer.cpp b/Easy2D/Tool/Timer.cpp index ba9d50e8..3ba37411 100644 --- a/Easy2D/Tool/Timer.cpp +++ b/Easy2D/Tool/Timer.cpp @@ -1,12 +1,13 @@ #include "..\easy2d.h" // 储存所有定时器的容器 -static std::vector s_nTimers; +static std::vector s_vTimers; Timer::Timer(TString name, UINT ms, const TIMER_CALLBACK & callback) : m_sName(name), m_bRunning(false), - m_callback(callback) + m_callback(callback), + m_pParentScene(nullptr) { setInterval(ms); // 设置定时器的时间间隔 } @@ -66,7 +67,7 @@ TString Timer::getName() const void Timer::__exec() { // 定时器容器为空 - if (!s_nTimers.size()) + if (!s_vTimers.size()) { return; } @@ -74,7 +75,7 @@ void Timer::__exec() static LARGE_INTEGER nNow; QueryPerformanceCounter(&nNow); // 循环遍历所有的定时器 - for (auto timer : s_nTimers) + for (auto timer : s_vTimers) { // 若定时器未运行,跳过这个定时器 if (!timer->m_bRunning) @@ -96,8 +97,9 @@ void Timer::addTimer(Timer * timer) { // 启动定时器 timer->start(); + timer->m_pParentScene = App::getCurrentScene(); // 将该定时器放入容器 - s_nTimers.push_back(timer); + s_vTimers.push_back(timer); } void Timer::addTimer(TString name, UINT ms, const TIMER_CALLBACK & callback) @@ -111,7 +113,7 @@ void Timer::addTimer(TString name, UINT ms, const TIMER_CALLBACK & callback) Timer * Timer::getTimer(TString name) { // 查找是否有相同名称的定时器 - for (auto timer : s_nTimers) + for (auto timer : s_vTimers) { if (timer->m_sName == name) { @@ -156,14 +158,14 @@ bool Timer::delTimer(TString name) // 创建迭代器 std::vector::iterator iter; // 循环遍历所有定时器 - for (iter = s_nTimers.begin(); iter != s_nTimers.end(); iter++) + for (iter = s_vTimers.begin(); iter != s_vTimers.end(); iter++) { // 查找相同名称的定时器 if ((*iter)->m_sName == name) { // 删除该定时器 delete (*iter); - s_nTimers.erase(iter); + s_vTimers.erase(iter); return true; } } @@ -174,10 +176,32 @@ bool Timer::delTimer(TString name) void Timer::clearAllTimers() { // 删除所有定时器 - for (auto t : s_nTimers) + for (auto t : s_vTimers) { delete t; } // 清空容器 - s_nTimers.clear(); + s_vTimers.clear(); +} + +void Timer::bindTimersWithScene(Scene * scene) +{ + for (auto t : s_vTimers) + { + if (!t->m_pParentScene) + { + t->m_pParentScene = App::getCurrentScene(); + } + } +} + +void Timer::stopAllSceneTimers(Scene * scene) +{ + for (auto t : s_vTimers) + { + if (t->m_pParentScene == scene) + { + t->stop(); + } + } } diff --git a/Easy2D/easy2d.h b/Easy2D/easy2d.h index 9c1d5317..c61077cf 100644 --- a/Easy2D/easy2d.h +++ b/Easy2D/easy2d.h @@ -182,8 +182,8 @@ public: protected: TString m_sTitle; TString m_sAppName; - Scene* m_CurrentScene; - Scene* m_NextScene; + Scene* m_pCurrentScene; + Scene* m_pNextScene; std::stack m_SceneStack; LARGE_INTEGER m_nAnimationInterval; CSize m_Size; @@ -271,6 +271,10 @@ public: static bool delListener(TString name); // 删除所有键盘监听 static void clearAllListeners(); + // 将未绑定的监听器绑定在场景上 + static void bindListenersWithScene(Scene* scene); + // 停止绑定在场景上的所有监听器 + static void clearAllSceneListeners(Scene* scene); // 左键是否按下 static bool isLButtonDown(); // 右键是否按下 @@ -316,6 +320,7 @@ private: protected: TString m_sName; MOUSE_CALLBACK m_callback; + Scene * m_pParentScene; protected: // 执行回调函数 @@ -325,7 +330,6 @@ protected: class KeyMsg { friend App; - public: KeyMsg(TString name, const KEY_CALLBACK& callback); ~KeyMsg(); @@ -339,6 +343,10 @@ public: static bool delListener(TString name); // 删除所有键盘监听 static void clearAllListeners(); + // 将未绑定的监听器绑定在场景上 + static void bindListenersWithScene(Scene* scene); + // 停止绑定在场景上的所有定时器 + static void clearAllSceneListeners(Scene* scene); // 判断键是否被按下,按下返回true static bool isKeyDown(VK_KEY key); @@ -360,6 +368,7 @@ private: protected: TString m_sName; KEY_CALLBACK m_callback; + Scene * m_pParentScene; }; class FontStyle : @@ -1050,7 +1059,8 @@ public: protected: bool m_bRunning; bool m_bStop; - Sprite * m_pParent; + Sprite * m_pTargetSprite; + Scene * m_pParentScene; UINT m_nMilliSeconds; LARGE_INTEGER m_nLast; LARGE_INTEGER m_nAnimationInterval; @@ -1399,7 +1409,6 @@ public: class Timer { friend App; - public: Timer(TString name, UINT ms, const TIMER_CALLBACK & callback); ~Timer(); @@ -1436,6 +1445,11 @@ public: // 删除所有定时器 static void clearAllTimers(); + // 将未绑定的定时器绑定在场景上 + static void bindTimersWithScene(Scene* scene); + // 停止绑定在场景上的所有定时器 + static void stopAllSceneTimers(Scene* scene); + protected: bool m_bRunning; TString m_sName; @@ -1443,6 +1457,7 @@ protected: LARGE_INTEGER m_nLast; LARGE_INTEGER m_nAnimationInterval; UINT m_nMilliSeconds; + Scene * m_pParentScene; private: static void __exec(); @@ -1482,6 +1497,11 @@ public: // 删除当前存在的所有动作 static void clearAllActions(); + // 将未绑定的动作绑定在场景上 + static void bindActionsWithScene(Scene* scene); + // 停止绑定在场景上的动作 + static void stopAllSceneActions(Scene* scene); + private: static void __exec(); // 将一个动作添加进动作管理器