修复了动作初始化的时机
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