修复了对象重复释放的bug
This commit is contained in:
parent
9fa60891a4
commit
3abc386793
|
|
@ -271,8 +271,6 @@ void e2d::EApp::run()
|
||||||
|
|
||||||
// 关闭控制台
|
// 关闭控制台
|
||||||
EApp::showConsole(false);
|
EApp::showConsole(false);
|
||||||
// 释放所有内存资源
|
|
||||||
this->_free();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EApp::setFPS(UINT32 fps)
|
void e2d::EApp::setFPS(UINT32 fps)
|
||||||
|
|
@ -581,14 +579,6 @@ void e2d::EApp::showWindow()
|
||||||
ShowWindow(GetHWnd(), SW_SHOWNORMAL);
|
ShowWindow(GetHWnd(), SW_SHOWNORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EApp::_free()
|
|
||||||
{
|
|
||||||
// 删除图片缓存
|
|
||||||
ETexture::clearCache();
|
|
||||||
// 删除所有对象(包括所有场景、定时器、监听器、动画)
|
|
||||||
EObjectManager::clearAllObjects();
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::EApp::quit()
|
void e2d::EApp::quit()
|
||||||
{
|
{
|
||||||
get()->m_bEnd = true;
|
get()->m_bEnd = true;
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
<DebugInformationFormat>None</DebugInformationFormat>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
|
@ -146,7 +146,6 @@
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>false</FunctionLevelLinking>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
|
|
@ -172,7 +171,6 @@
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
#include "..\etools.h"
|
#include "..\etools.h"
|
||||||
|
|
||||||
// EObjectManager 释放池的实现机制:
|
// EObjectManager 释放池的实现机制:
|
||||||
/// EObject 类中的引用计数(m_nRefCount)保证了指针的使用安全
|
// EObject 类中的引用计数(m_nRefCount)保证了指针的使用安全
|
||||||
/// 它记录了对象被使用的次数,当计数为 0 时,EObjectManager 会自动释放这个对象
|
// 它记录了对象被使用的次数,当计数为 0 时,EObjectManager 会自动释放这个对象
|
||||||
/// 所有的 EObject 对象都应在被使用时(例如 Text 添加到了场景中)
|
// 所有的 EObject 对象都应在被使用时(例如 Text 添加到了场景中)
|
||||||
/// 调用 retain 函数保证该对象不被删除,并在不再使用时调用 release 函数
|
// 调用 retain 函数保证该对象不被删除,并在不再使用时调用 release 函数
|
||||||
/// 让其自动释放
|
// 让其自动释放
|
||||||
|
|
||||||
// 释放池容器
|
// 释放池容器
|
||||||
static e2d::EVector<e2d::EObject*> s_vPool;
|
static e2d::EVector<e2d::EObject*> s_vPool;
|
||||||
|
|
@ -45,15 +45,6 @@ void e2d::EObjectManager::add(e2d::EObject * nptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EObjectManager::clearAllObjects()
|
|
||||||
{
|
|
||||||
for (const auto &obj : s_vPool)
|
|
||||||
{
|
|
||||||
delete obj;
|
|
||||||
}
|
|
||||||
s_vPool.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::EObjectManager::notifyFlush()
|
void e2d::EObjectManager::notifyFlush()
|
||||||
{
|
{
|
||||||
s_bNotifyed = true;
|
s_bNotifyed = true;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,10 @@ e2d::ENode::~ENode()
|
||||||
EMsgManager::_clearAllMouseListenersBindedWith(this);
|
EMsgManager::_clearAllMouseListenersBindedWith(this);
|
||||||
EMsgManager::_clearAllKeyboardListenersBindedWith(this);
|
EMsgManager::_clearAllKeyboardListenersBindedWith(this);
|
||||||
EActionManager::_clearAllActionsBindedWith(this);
|
EActionManager::_clearAllActionsBindedWith(this);
|
||||||
|
for (auto child : m_vChildren)
|
||||||
|
{
|
||||||
|
SafeReleaseAndClear(&child);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::ENode::onEnter()
|
void e2d::ENode::onEnter()
|
||||||
|
|
|
||||||
|
|
@ -184,9 +184,6 @@ protected:
|
||||||
UINT32 height
|
UINT32 height
|
||||||
);
|
);
|
||||||
|
|
||||||
// 释放所有内存资源
|
|
||||||
void _free();
|
|
||||||
|
|
||||||
// ´°¿Ú³ÌÐò
|
// ´°¿Ú³ÌÐò
|
||||||
static LRESULT CALLBACK WndProc(
|
static LRESULT CALLBACK WndProc(
|
||||||
HWND hWnd,
|
HWND hWnd,
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,6 @@ public:
|
||||||
e2d::EObject * nptr
|
e2d::EObject * nptr
|
||||||
);
|
);
|
||||||
|
|
||||||
// 删除所有节点
|
|
||||||
static void clearAllObjects();
|
|
||||||
|
|
||||||
// 通知内存池刷新
|
// 通知内存池刷新
|
||||||
static void notifyFlush();
|
static void notifyFlush();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue