修复了动作初始化的时机
This commit is contained in:
parent
51b6280a56
commit
9605391964
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ ActionCallback * ActionCallback::copy() const
|
|||
|
||||
void ActionCallback::_init()
|
||||
{
|
||||
Action::_init();
|
||||
}
|
||||
|
||||
void ActionCallback::_exec(LARGE_INTEGER nNow)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ ActionDelay * ActionDelay::copy() const
|
|||
|
||||
void ActionDelay::_init()
|
||||
{
|
||||
Action::_init();
|
||||
// 记录当前时间
|
||||
QueryPerformanceCounter(&m_nLast);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ ActionFrames::~ActionFrames()
|
|||
|
||||
void ActionFrames::_init()
|
||||
{
|
||||
Action::_init();
|
||||
// 记录当前时间
|
||||
QueryPerformanceCounter(&m_nLast);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ ActionNeverStop * ActionNeverStop::copy() const
|
|||
|
||||
void ActionNeverStop::_init()
|
||||
{
|
||||
Action::_init();
|
||||
m_Action->m_pTargetSprite = m_pTargetSprite;
|
||||
m_Action->_init();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ bool Animation::_isEnd() const
|
|||
|
||||
void Animation::_init()
|
||||
{
|
||||
Action::_init();
|
||||
// 记录当前时间
|
||||
QueryPerformanceCounter(&m_nLast);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue