修复资源释放问题
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