修复了动作初始化的时机
This commit is contained in:
parent
51b6280a56
commit
9605391964
|
|
@ -5,6 +5,7 @@ Action::Action() :
|
||||||
m_bRunning(true),
|
m_bRunning(true),
|
||||||
m_bWaiting(false),
|
m_bWaiting(false),
|
||||||
m_bEnding(false),
|
m_bEnding(false),
|
||||||
|
m_bInit(false),
|
||||||
m_pTargetSprite(nullptr),
|
m_pTargetSprite(nullptr),
|
||||||
m_pParentScene(nullptr)
|
m_pParentScene(nullptr)
|
||||||
{
|
{
|
||||||
|
|
@ -76,7 +77,13 @@ Sprite * Action::getTarget()
|
||||||
return m_pTargetSprite;
|
return m_pTargetSprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Action::_init()
|
||||||
|
{
|
||||||
|
m_bInit = true;
|
||||||
|
}
|
||||||
|
|
||||||
void Action::_reset()
|
void Action::_reset()
|
||||||
{
|
{
|
||||||
|
m_bInit = false;
|
||||||
m_bEnding = false;
|
m_bEnding = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ ActionCallback * ActionCallback::copy() const
|
||||||
|
|
||||||
void ActionCallback::_init()
|
void ActionCallback::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActionCallback::_exec(LARGE_INTEGER nNow)
|
void ActionCallback::_exec(LARGE_INTEGER nNow)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ ActionDelay * ActionDelay::copy() const
|
||||||
|
|
||||||
void ActionDelay::_init()
|
void ActionDelay::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
// 记录当前时间
|
// 记录当前时间
|
||||||
QueryPerformanceCounter(&m_nLast);
|
QueryPerformanceCounter(&m_nLast);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ ActionFrames::~ActionFrames()
|
||||||
|
|
||||||
void ActionFrames::_init()
|
void ActionFrames::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
// 记录当前时间
|
// 记录当前时间
|
||||||
QueryPerformanceCounter(&m_nLast);
|
QueryPerformanceCounter(&m_nLast);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ ActionNeverStop * ActionNeverStop::copy() const
|
||||||
|
|
||||||
void ActionNeverStop::_init()
|
void ActionNeverStop::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
m_Action->m_pTargetSprite = m_pTargetSprite;
|
m_Action->m_pTargetSprite = m_pTargetSprite;
|
||||||
m_Action->_init();
|
m_Action->_init();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,13 @@ ActionSequence::~ActionSequence()
|
||||||
|
|
||||||
void ActionSequence::_init()
|
void ActionSequence::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
|
// 将所有动作与目标绑定
|
||||||
for (auto action : m_vActions)
|
for (auto action : m_vActions)
|
||||||
{
|
{
|
||||||
action->m_pTargetSprite = m_pTargetSprite;
|
action->m_pTargetSprite = m_pTargetSprite;
|
||||||
}
|
}
|
||||||
|
// 初始化第一个动作
|
||||||
m_vActions[0]->_init();
|
m_vActions[0]->_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,7 +66,6 @@ void ActionSequence::_reset()
|
||||||
{
|
{
|
||||||
action->_reset();
|
action->_reset();
|
||||||
}
|
}
|
||||||
m_vActions[0]->_init();
|
|
||||||
m_nActionIndex = 0;
|
m_nActionIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ ActionTwo * ActionTwo::reverse(bool actionReverse) const
|
||||||
|
|
||||||
void ActionTwo::_init()
|
void ActionTwo::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
m_FirstAction->m_pTargetSprite = m_pTargetSprite;
|
m_FirstAction->m_pTargetSprite = m_pTargetSprite;
|
||||||
m_SecondAction->m_pTargetSprite = m_pTargetSprite;
|
m_SecondAction->m_pTargetSprite = m_pTargetSprite;
|
||||||
|
|
||||||
|
|
@ -66,6 +67,4 @@ void ActionTwo::_reset()
|
||||||
|
|
||||||
m_FirstAction->_reset();
|
m_FirstAction->_reset();
|
||||||
m_SecondAction->_reset();
|
m_SecondAction->_reset();
|
||||||
|
|
||||||
m_FirstAction->_init();
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ bool Animation::_isEnd() const
|
||||||
|
|
||||||
void Animation::_init()
|
void Animation::_init()
|
||||||
{
|
{
|
||||||
|
Action::_init();
|
||||||
// 记录当前时间
|
// 记录当前时间
|
||||||
QueryPerformanceCounter(&m_nLast);
|
QueryPerformanceCounter(&m_nLast);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,30 @@ void ActionManager::__exec()
|
||||||
// 获取当前时间
|
// 获取当前时间
|
||||||
static LARGE_INTEGER nNow;
|
static LARGE_INTEGER nNow;
|
||||||
QueryPerformanceCounter(&nNow);
|
QueryPerformanceCounter(&nNow);
|
||||||
|
// 临时指针
|
||||||
|
Action * action;
|
||||||
// 循环遍历所有正在运行的动作
|
// 循环遍历所有正在运行的动作
|
||||||
for (size_t i = 0; i < s_vActions.size(); i++)
|
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);
|
s_vActions.erase(s_vActions.begin() + i);
|
||||||
}
|
}
|
||||||
else
|
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
|
#endif
|
||||||
action->m_pParentScene = App::getLoadingScene();
|
action->m_pParentScene = App::getLoadingScene();
|
||||||
action->_init();
|
|
||||||
s_vActions.push_back(action);
|
s_vActions.push_back(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1108,6 +1108,7 @@ protected:
|
||||||
bool m_bRunning;
|
bool m_bRunning;
|
||||||
bool m_bWaiting;
|
bool m_bWaiting;
|
||||||
bool m_bEnding;
|
bool m_bEnding;
|
||||||
|
bool m_bInit;
|
||||||
Sprite * m_pTargetSprite;
|
Sprite * m_pTargetSprite;
|
||||||
Scene * m_pParentScene;
|
Scene * m_pParentScene;
|
||||||
UINT m_nMilliSeconds;
|
UINT m_nMilliSeconds;
|
||||||
|
|
@ -1115,7 +1116,7 @@ protected:
|
||||||
LARGE_INTEGER m_nAnimationInterval;
|
LARGE_INTEGER m_nAnimationInterval;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _init() = 0;
|
virtual void _init();
|
||||||
virtual void _exec(LARGE_INTEGER nNow) = 0;
|
virtual void _exec(LARGE_INTEGER nNow) = 0;
|
||||||
virtual void _reset();
|
virtual void _reset();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue