修复资源释放问题
This commit is contained in:
		
							parent
							
								
									4cd8d0d08b
								
							
						
					
					
						commit
						d918f4612f
					
				|  | @ -18,8 +18,7 @@ e2d::EActionFrames::~EActionFrames() | ||||||
| { | { | ||||||
| 	for (auto frame : m_vFrames) | 	for (auto frame : m_vFrames) | ||||||
| 	{ | 	{ | ||||||
| 		frame->autoRelease(); | 		SafeRelease(&frame); | ||||||
| 		frame->release(); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,15 +7,19 @@ | ||||||
| e2d::EScene::EScene() | e2d::EScene::EScene() | ||||||
| 	: m_bWillSave(true) | 	: m_bWillSave(true) | ||||||
| 	, m_bSortNeeded(false) | 	, m_bSortNeeded(false) | ||||||
| 	, m_Root(new ENode()) | 	, m_pRoot(new ENode()) | ||||||
| { | { | ||||||
| 	m_Root->_onEnter(); | 	m_pRoot->_onEnter(); | ||||||
| 	m_Root->_setParentScene(this); | 	m_pRoot->_setParentScene(this); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EScene::~EScene() | e2d::EScene::~EScene() | ||||||
| { | { | ||||||
| 	m_Root->autoRelease(); | 	SafeRelease(&m_pRoot); | ||||||
|  | 	ETimerManager::clearAllTimersBindedWith(this); | ||||||
|  | 	EMsgManager::clearAllMouseListenersBindedWith(this); | ||||||
|  | 	EMsgManager::clearAllKeyboardListenersBindedWith(this); | ||||||
|  | 	EActionManager::clearAllActionsBindedWith(this); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::onEnter() | void e2d::EScene::onEnter() | ||||||
|  | @ -42,7 +46,7 @@ bool e2d::EScene::onCloseWindow() | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::_onRender() | void e2d::EScene::_onRender() | ||||||
| { | { | ||||||
| 	m_Root->_callOn(); | 	m_pRoot->_callOn(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::_onEnter() | void e2d::EScene::_onEnter() | ||||||
|  | @ -63,48 +67,41 @@ void e2d::EScene::_onExit() | ||||||
| 		EMsgManager::_waitAllKeyboardListenersBindedWith(this); | 		EMsgManager::_waitAllKeyboardListenersBindedWith(this); | ||||||
| 		EActionManager::_waitAllActionsBindedWith(this); | 		EActionManager::_waitAllActionsBindedWith(this); | ||||||
| 	} | 	} | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		ETimerManager::clearAllTimersBindedWith(this); |  | ||||||
| 		EMsgManager::clearAllMouseListenersBindedWith(this); |  | ||||||
| 		EMsgManager::clearAllKeyboardListenersBindedWith(this); |  | ||||||
| 		EActionManager::clearAllActionsBindedWith(this); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::add(ENode * child, int order /* = 0 */) | void e2d::EScene::add(ENode * child, int order /* = 0 */) | ||||||
| { | { | ||||||
| 	m_Root->addChild(child, order); | 	m_pRoot->addChild(child, order); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool e2d::EScene::remove(ENode * child, bool release /* = false */) | bool e2d::EScene::remove(ENode * child, bool release /* = false */) | ||||||
| { | { | ||||||
| 	return m_Root->removeChild(child, release); | 	return m_pRoot->removeChild(child, release); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::remove(const EString &childName, bool release /* = false */) | void e2d::EScene::remove(const EString &childName, bool release /* = false */) | ||||||
| { | { | ||||||
| 	return m_Root->removeChild(childName, release); | 	return m_pRoot->removeChild(childName, release); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::EVector<e2d::ENode*>& e2d::EScene::getChildren() | e2d::EVector<e2d::ENode*>& e2d::EScene::getChildren() | ||||||
| { | { | ||||||
| 	return m_Root->m_vChildren; | 	return m_pRoot->m_vChildren; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| size_t e2d::EScene::getChildrenCount() const | size_t e2d::EScene::getChildrenCount() const | ||||||
| { | { | ||||||
| 	return m_Root->getChildrenCount(); | 	return m_pRoot->getChildrenCount(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| e2d::ENode * e2d::EScene::getChild(const EString &childName) | e2d::ENode * e2d::EScene::getChild(const EString &childName) | ||||||
| { | { | ||||||
| 	return m_Root->getChild(childName); | 	return m_pRoot->getChild(childName); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::clearAllChildren() | void e2d::EScene::clearAllChildren() | ||||||
| { | { | ||||||
| 	m_Root->clearAllChildren(); | 	m_pRoot->clearAllChildren(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::EScene::bindListener(EMouseListener * listener) | void e2d::EScene::bindListener(EMouseListener * listener) | ||||||
|  |  | ||||||
|  | @ -252,8 +252,7 @@ void e2d::EMsgManager::delMouseListeners(const EString & name) | ||||||
| 	{ | 	{ | ||||||
| 		if ((*mIter)->getName() == name) | 		if ((*mIter)->getName() == name) | ||||||
| 		{ | 		{ | ||||||
| 			(*mIter)->autoRelease(); | 			SafeRelease(&(*mIter)); | ||||||
| 			(*mIter)->release(); |  | ||||||
| 			mIter = s_vMouseListeners.erase(mIter); | 			mIter = s_vMouseListeners.erase(mIter); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -295,8 +294,7 @@ void e2d::EMsgManager::delKeyboardListeners(const EString & name) | ||||||
| 	{ | 	{ | ||||||
| 		if ((*kIter)->getName() == name) | 		if ((*kIter)->getName() == name) | ||||||
| 		{ | 		{ | ||||||
| 			(*kIter)->autoRelease(); | 			SafeRelease(&(*kIter)); | ||||||
| 			(*kIter)->release(); |  | ||||||
| 			kIter = s_vKeyboardListeners.erase(kIter); | 			kIter = s_vKeyboardListeners.erase(kIter); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -433,8 +431,7 @@ void e2d::EMsgManager::clearAllMouseListenersBindedWith(EScene * pParentScene) | ||||||
| 		auto t = s_vMouseListeners[i]; | 		auto t = s_vMouseListeners[i]; | ||||||
| 		if (t->getParentScene() == pParentScene) | 		if (t->getParentScene() == pParentScene) | ||||||
| 		{ | 		{ | ||||||
| 			t->autoRelease(); | 			SafeRelease(&t); | ||||||
| 			t->release(); |  | ||||||
| 			s_vMouseListeners.erase(s_vMouseListeners.begin() + i); | 			s_vMouseListeners.erase(s_vMouseListeners.begin() + i); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -455,8 +452,7 @@ void e2d::EMsgManager::clearAllKeyboardListenersBindedWith(EScene * pParentScene | ||||||
| 		auto t = s_vKeyboardListeners[i]; | 		auto t = s_vKeyboardListeners[i]; | ||||||
| 		if (t->getParentScene() == pParentScene) | 		if (t->getParentScene() == pParentScene) | ||||||
| 		{ | 		{ | ||||||
| 			t->autoRelease(); | 			SafeRelease(&t); | ||||||
| 			t->release(); |  | ||||||
| 			s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); | 			s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -477,8 +473,7 @@ void e2d::EMsgManager::clearAllMouseListenersBindedWith(ENode * pParentNode) | ||||||
| 		auto t = s_vMouseListeners[i]; | 		auto t = s_vMouseListeners[i]; | ||||||
| 		if (t->getParentNode() == pParentNode) | 		if (t->getParentNode() == pParentNode) | ||||||
| 		{ | 		{ | ||||||
| 			t->autoRelease(); | 			SafeRelease(&t); | ||||||
| 			t->release(); |  | ||||||
| 			s_vMouseListeners.erase(s_vMouseListeners.begin() + i); | 			s_vMouseListeners.erase(s_vMouseListeners.begin() + i); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -499,8 +494,7 @@ void e2d::EMsgManager::clearAllKeyboardListenersBindedWith(ENode * pParentNode) | ||||||
| 		auto t = s_vKeyboardListeners[i]; | 		auto t = s_vKeyboardListeners[i]; | ||||||
| 		if (t->getParentNode() == pParentNode) | 		if (t->getParentNode() == pParentNode) | ||||||
| 		{ | 		{ | ||||||
| 			t->autoRelease(); | 			SafeRelease(&t); | ||||||
| 			t->release(); |  | ||||||
| 			s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); | 			s_vKeyboardListeners.erase(s_vKeyboardListeners.begin() + i); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -100,8 +100,7 @@ void e2d::EActionManager::clearAllActionsBindedWith(ENode * pTargetNode) | ||||||
| 			auto a = s_vActions[i]; | 			auto a = s_vActions[i]; | ||||||
| 			if (a->getTarget() == pTargetNode) | 			if (a->getTarget() == pTargetNode) | ||||||
| 			{ | 			{ | ||||||
| 				a->autoRelease(); | 				SafeRelease(&a); | ||||||
| 				a->release(); |  | ||||||
| 				s_vActions.erase(s_vActions.begin() + i); | 				s_vActions.erase(s_vActions.begin() + i); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
|  | @ -205,8 +204,7 @@ void e2d::EActionManager::ActionProc() | ||||||
| 			if (action->_isEnding()) | 			if (action->_isEnding()) | ||||||
| 			{ | 			{ | ||||||
| 				// 动作已经结束
 | 				// 动作已经结束
 | ||||||
| 				action->autoRelease(); | 				SafeRelease(&action); | ||||||
| 				action->release(); |  | ||||||
| 				s_vActions.erase(s_vActions.begin() + i); | 				s_vActions.erase(s_vActions.begin() + i); | ||||||
| 			} | 			} | ||||||
| 			else | 			else | ||||||
|  |  | ||||||
|  | @ -69,8 +69,7 @@ void e2d::ETimerManager::delTimers(const EString & name) | ||||||
| 	{ | 	{ | ||||||
| 		if ((*mIter)->getName() == name) | 		if ((*mIter)->getName() == name) | ||||||
| 		{ | 		{ | ||||||
| 			(*mIter)->autoRelease(); | 			SafeRelease(&(*mIter)); | ||||||
| 			(*mIter)->release(); |  | ||||||
| 			mIter = s_vTimers.erase(mIter); | 			mIter = s_vTimers.erase(mIter); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -117,8 +116,7 @@ void e2d::ETimerManager::clearAllTimersBindedWith(EScene * pParentScene) | ||||||
| 		auto t = s_vTimers[i]; | 		auto t = s_vTimers[i]; | ||||||
| 		if (t->getParentScene() == pParentScene) | 		if (t->getParentScene() == pParentScene) | ||||||
| 		{ | 		{ | ||||||
| 			t->autoRelease(); | 			SafeRelease(&t); | ||||||
| 			t->release(); |  | ||||||
| 			s_vTimers.erase(s_vTimers.begin() + i); | 			s_vTimers.erase(s_vTimers.begin() + i); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  | @ -169,8 +167,7 @@ void e2d::ETimerManager::clearAllTimersBindedWith(ENode * pParentNode) | ||||||
| 		auto t = s_vTimers[i]; | 		auto t = s_vTimers[i]; | ||||||
| 		if (t->getParentNode() == pParentNode) | 		if (t->getParentNode() == pParentNode) | ||||||
| 		{ | 		{ | ||||||
| 			t->autoRelease(); | 			SafeRelease(&t); | ||||||
| 			t->release(); |  | ||||||
| 			s_vTimers.erase(s_vTimers.begin() + i); | 			s_vTimers.erase(s_vTimers.begin() + i); | ||||||
| 		} | 		} | ||||||
| 		else | 		else | ||||||
|  |  | ||||||
|  | @ -88,8 +88,8 @@ public: | ||||||
| 
 | 
 | ||||||
| 	// 切换场景
 | 	// 切换场景
 | ||||||
| 	static void enterScene( | 	static void enterScene( | ||||||
| 		EScene * scene, | 		EScene * scene,					/* 下一个场景的指针 */ | ||||||
| 		bool saveCurrentScene = true | 		bool saveCurrentScene = true	/* 是否保存当前场景 */ | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	// 返回上一场景
 | 	// 返回上一场景
 | ||||||
|  | @ -261,7 +261,7 @@ protected: | ||||||
| protected: | protected: | ||||||
| 	bool m_bSortNeeded; | 	bool m_bSortNeeded; | ||||||
| 	bool m_bWillSave; | 	bool m_bWillSave; | ||||||
| 	ENode * const m_Root; | 	ENode * m_pRoot; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue