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