141 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			141 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | #include "..\easy2d.h"
 | |||
|  | 
 | |||
|  | static std::vector<Action*> s_vActions; | |||
|  | 
 | |||
|  | void ActionManager::__exec() | |||
|  | { | |||
|  | 	// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
 | |||
|  | 	static LARGE_INTEGER nNow; | |||
|  | 	QueryPerformanceCounter(&nNow); | |||
|  | 	// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĶ<D0B5><C4B6><EFBFBD>
 | |||
|  | 	std::vector<Action*>::iterator iter; | |||
|  | 	for (iter = s_vActions.begin(); iter != s_vActions.end();) | |||
|  | 	{ | |||
|  | 		if ((*iter)->isRunning() && (*iter)->_exec(nNow)) | |||
|  | 		{ | |||
|  | 			// _exec <20><><EFBFBD><EFBFBD> true ʱ˵<CAB1><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
 | |||
|  | 			(*iter)->release(); | |||
|  | 			iter = s_vActions.erase(iter); | |||
|  | 		} | |||
|  | 		else | |||
|  | 		{ | |||
|  | 			iter++; | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::addAction(Action * action) | |||
|  | { | |||
|  | 	if (action) | |||
|  | 	{ | |||
|  | 		action->_init(); | |||
|  | 		s_vActions.push_back(action); | |||
|  | 		action->retain(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::startAction(Action * action) | |||
|  | { | |||
|  | 	resumeAction(action); | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::resumeAction(Action * action) | |||
|  | { | |||
|  | 	for (auto act : s_vActions) | |||
|  | 	{ | |||
|  | 		if (act == action) | |||
|  | 		{ | |||
|  | 			act->resume(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::pauseAction(Action * action) | |||
|  | { | |||
|  | 	for (auto act : s_vActions) | |||
|  | 	{ | |||
|  | 		if (act == action) | |||
|  | 		{ | |||
|  | 			act->pause(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::stopAction(Action * action) | |||
|  | { | |||
|  | 	for (auto act : s_vActions) | |||
|  | 	{ | |||
|  | 		if (act == action) | |||
|  | 		{ | |||
|  | 			act->stop(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::startSpriteAllActions(Sprite * sprite) | |||
|  | { | |||
|  | 	resumeSpriteAllActions(sprite); | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::resumeSpriteAllActions(Sprite * sprite) | |||
|  | { | |||
|  | 	for (auto action : s_vActions) | |||
|  | 	{ | |||
|  | 		if (action->m_pParent == sprite) | |||
|  | 		{ | |||
|  | 			action->resume(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::pauseSpriteAllActions(Sprite * sprite) | |||
|  | { | |||
|  | 	for (auto action : s_vActions) | |||
|  | 	{ | |||
|  | 		if (action->m_pParent == sprite) | |||
|  | 		{ | |||
|  | 			action->pause(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::stopSpriteAllActions(Sprite * sprite) | |||
|  | { | |||
|  | 	for (auto action : s_vActions) | |||
|  | 	{ | |||
|  | 		if (action->m_pParent == sprite) | |||
|  | 		{ | |||
|  | 			action->stop(); | |||
|  | 		} | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::startAllActions() | |||
|  | { | |||
|  | 	resumeAllActions(); | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::resumeAllActions() | |||
|  | { | |||
|  | 	for (auto action : s_vActions) | |||
|  | 	{ | |||
|  | 		action->resume(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::pauseAllActions() | |||
|  | { | |||
|  | 	for (auto action : s_vActions) | |||
|  | 	{ | |||
|  | 		action->pause(); | |||
|  | 	} | |||
|  | } | |||
|  | 
 | |||
|  | void ActionManager::stopAllActions() | |||
|  | { | |||
|  | 	for (auto action : s_vActions) | |||
|  | 	{ | |||
|  | 		action->stop(); | |||
|  | 	} | |||
|  | } |