From 960539196493c49f3fed9f8e76799ca0a4eefa58 Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Sun, 8 Oct 2017 13:26:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=8A=A8=E4=BD=9C?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=9A=84=E6=97=B6=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Easy2D/Action/Action.cpp | 7 +++++++ Easy2D/Action/ActionCallback.cpp | 1 + Easy2D/Action/ActionDelay.cpp | 1 + Easy2D/Action/ActionFrames.cpp | 1 + Easy2D/Action/ActionNeverStop.cpp | 1 + Easy2D/Action/ActionSequence.cpp | 4 +++- Easy2D/Action/ActionTwo.cpp | 3 +-- Easy2D/Action/Animation.cpp | 1 + Easy2D/Tool/ActionManager.cpp | 19 ++++++++++++++----- Easy2D/easy2d.h | 3 ++- 10 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Easy2D/Action/Action.cpp b/Easy2D/Action/Action.cpp index 1320f335..f6395bb2 100644 --- a/Easy2D/Action/Action.cpp +++ b/Easy2D/Action/Action.cpp @@ -5,6 +5,7 @@ Action::Action() : m_bRunning(true), m_bWaiting(false), m_bEnding(false), + m_bInit(false), m_pTargetSprite(nullptr), m_pParentScene(nullptr) { @@ -76,7 +77,13 @@ Sprite * Action::getTarget() return m_pTargetSprite; } +void Action::_init() +{ + m_bInit = true; +} + void Action::_reset() { + m_bInit = false; m_bEnding = false; } diff --git a/Easy2D/Action/ActionCallback.cpp b/Easy2D/Action/ActionCallback.cpp index fc6f8373..de338316 100644 --- a/Easy2D/Action/ActionCallback.cpp +++ b/Easy2D/Action/ActionCallback.cpp @@ -16,6 +16,7 @@ ActionCallback * ActionCallback::copy() const void ActionCallback::_init() { + Action::_init(); } void ActionCallback::_exec(LARGE_INTEGER nNow) diff --git a/Easy2D/Action/ActionDelay.cpp b/Easy2D/Action/ActionDelay.cpp index 70f63746..09ece168 100644 --- a/Easy2D/Action/ActionDelay.cpp +++ b/Easy2D/Action/ActionDelay.cpp @@ -16,6 +16,7 @@ ActionDelay * ActionDelay::copy() const void ActionDelay::_init() { + Action::_init(); // 记录当前时间 QueryPerformanceCounter(&m_nLast); } diff --git a/Easy2D/Action/ActionFrames.cpp b/Easy2D/Action/ActionFrames.cpp index 87653f70..ea41c070 100644 --- a/Easy2D/Action/ActionFrames.cpp +++ b/Easy2D/Action/ActionFrames.cpp @@ -23,6 +23,7 @@ ActionFrames::~ActionFrames() void ActionFrames::_init() { + Action::_init(); // 记录当前时间 QueryPerformanceCounter(&m_nLast); } diff --git a/Easy2D/Action/ActionNeverStop.cpp b/Easy2D/Action/ActionNeverStop.cpp index 6da217c1..5607a10f 100644 --- a/Easy2D/Action/ActionNeverStop.cpp +++ b/Easy2D/Action/ActionNeverStop.cpp @@ -18,6 +18,7 @@ ActionNeverStop * ActionNeverStop::copy() const void ActionNeverStop::_init() { + Action::_init(); m_Action->m_pTargetSprite = m_pTargetSprite; m_Action->_init(); } diff --git a/Easy2D/Action/ActionSequence.cpp b/Easy2D/Action/ActionSequence.cpp index 71fe65c3..7fbd2fa2 100644 --- a/Easy2D/Action/ActionSequence.cpp +++ b/Easy2D/Action/ActionSequence.cpp @@ -31,10 +31,13 @@ ActionSequence::~ActionSequence() void ActionSequence::_init() { + Action::_init(); + // 将所有动作与目标绑定 for (auto action : m_vActions) { action->m_pTargetSprite = m_pTargetSprite; } + // 初始化第一个动作 m_vActions[0]->_init(); } @@ -63,7 +66,6 @@ void ActionSequence::_reset() { action->_reset(); } - m_vActions[0]->_init(); m_nActionIndex = 0; } diff --git a/Easy2D/Action/ActionTwo.cpp b/Easy2D/Action/ActionTwo.cpp index 5472aaae..0acc6e74 100644 --- a/Easy2D/Action/ActionTwo.cpp +++ b/Easy2D/Action/ActionTwo.cpp @@ -33,6 +33,7 @@ ActionTwo * ActionTwo::reverse(bool actionReverse) const void ActionTwo::_init() { + Action::_init(); m_FirstAction->m_pTargetSprite = m_pTargetSprite; m_SecondAction->m_pTargetSprite = m_pTargetSprite; @@ -66,6 +67,4 @@ void ActionTwo::_reset() m_FirstAction->_reset(); m_SecondAction->_reset(); - - m_FirstAction->_init(); } diff --git a/Easy2D/Action/Animation.cpp b/Easy2D/Action/Animation.cpp index 69c01e48..6ac71a1f 100644 --- a/Easy2D/Action/Animation.cpp +++ b/Easy2D/Action/Animation.cpp @@ -17,6 +17,7 @@ bool Animation::_isEnd() const void Animation::_init() { + Action::_init(); // 记录当前时间 QueryPerformanceCounter(&m_nLast); } diff --git a/Easy2D/Tool/ActionManager.cpp b/Easy2D/Tool/ActionManager.cpp index 44b4e0cd..8408a7bf 100644 --- a/Easy2D/Tool/ActionManager.cpp +++ b/Easy2D/Tool/ActionManager.cpp @@ -8,20 +8,30 @@ void ActionManager::__exec() // 获取当前时间 static LARGE_INTEGER nNow; QueryPerformanceCounter(&nNow); + // 临时指针 + Action * action; // 循环遍历所有正在运行的动作 for (size_t i = 0; i < s_vActions.size(); i++) { - if (s_vActions[i]->isRunning()) + action = s_vActions[i]; + // 获取动作运行状态 + if (action->isRunning()) { - if (s_vActions[i]->isEnding()) + if (action->isEnding()) { // 动作已经结束 - s_vActions[i]->release(); + action->release(); s_vActions.erase(s_vActions.begin() + i); } else { - s_vActions[i]->_exec(nNow); + // 初始化动作 + if (!action->m_bInit) + { + action->_init(); + } + // 执行动作 + action->_exec(nNow); } } } @@ -38,7 +48,6 @@ void ActionManager::addAction(Action * action) } #endif action->m_pParentScene = App::getLoadingScene(); - action->_init(); s_vActions.push_back(action); } } diff --git a/Easy2D/easy2d.h b/Easy2D/easy2d.h index cf22ce7f..7be7615d 100644 --- a/Easy2D/easy2d.h +++ b/Easy2D/easy2d.h @@ -1108,6 +1108,7 @@ protected: bool m_bRunning; bool m_bWaiting; bool m_bEnding; + bool m_bInit; Sprite * m_pTargetSprite; Scene * m_pParentScene; UINT m_nMilliSeconds; @@ -1115,7 +1116,7 @@ protected: LARGE_INTEGER m_nAnimationInterval; protected: - virtual void _init() = 0; + virtual void _init(); virtual void _exec(LARGE_INTEGER nNow) = 0; virtual void _reset(); };