修复了动作初始化的时机

This commit is contained in:
Nomango 2017-10-08 13:26:42 +08:00
parent 51b6280a56
commit 9605391964
10 changed files with 32 additions and 9 deletions

View File

@ -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;
}

View File

@ -16,6 +16,7 @@ ActionCallback * ActionCallback::copy() const
void ActionCallback::_init()
{
Action::_init();
}
void ActionCallback::_exec(LARGE_INTEGER nNow)

View File

@ -16,6 +16,7 @@ ActionDelay * ActionDelay::copy() const
void ActionDelay::_init()
{
Action::_init();
// 记录当前时间
QueryPerformanceCounter(&m_nLast);
}

View File

@ -23,6 +23,7 @@ ActionFrames::~ActionFrames()
void ActionFrames::_init()
{
Action::_init();
// 记录当前时间
QueryPerformanceCounter(&m_nLast);
}

View File

@ -18,6 +18,7 @@ ActionNeverStop * ActionNeverStop::copy() const
void ActionNeverStop::_init()
{
Action::_init();
m_Action->m_pTargetSprite = m_pTargetSprite;
m_Action->_init();
}

View File

@ -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;
}

View File

@ -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();
}

View File

@ -17,6 +17,7 @@ bool Animation::_isEnd() const
void Animation::_init()
{
Action::_init();
// 记录当前时间
QueryPerformanceCounter(&m_nLast);
}

View File

@ -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);
}
}

View File

@ -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();
};