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