新增获取游戏时长函数,以及窗口在激活、非激活、关闭时的执行函数
This commit is contained in:
parent
2422ec258b
commit
0689e1b0e9
|
|
@ -16,6 +16,8 @@ using namespace std::chrono;
|
||||||
e2d::EApp * s_pInstance = nullptr;
|
e2d::EApp * s_pInstance = nullptr;
|
||||||
// 场景栈
|
// 场景栈
|
||||||
std::stack<e2d::EScene*> s_SceneStack;
|
std::stack<e2d::EScene*> s_SceneStack;
|
||||||
|
// 游戏开始时间
|
||||||
|
static steady_clock::time_point s_tStart;
|
||||||
|
|
||||||
e2d::EApp::EApp()
|
e2d::EApp::EApp()
|
||||||
: m_bRunning(false)
|
: m_bRunning(false)
|
||||||
|
|
@ -195,6 +197,8 @@ void e2d::EApp::run()
|
||||||
UpdateWindow(GetHWnd());
|
UpdateWindow(GetHWnd());
|
||||||
// 运行游戏
|
// 运行游戏
|
||||||
m_bRunning = true;
|
m_bRunning = true;
|
||||||
|
// 记录开始时间
|
||||||
|
s_tStart = steady_clock::now();
|
||||||
|
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
|
|
@ -222,7 +226,15 @@ void e2d::EApp::setFPS(UINT32 fps)
|
||||||
nAnimationInterval = 1000 / fps;
|
nAnimationInterval = 1000 / fps;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::EApp::onExit()
|
void e2d::EApp::onActivate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EApp::onInactive()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::EApp::onCloseWindow()
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -241,6 +253,8 @@ void e2d::EApp::_mainLoop()
|
||||||
nInterval = GetInterval(tLast);
|
nInterval = GetInterval(tLast);
|
||||||
// 判断间隔时间是否足够
|
// 判断间隔时间是否足够
|
||||||
if (nInterval >= nAnimationInterval)
|
if (nInterval >= nAnimationInterval)
|
||||||
|
{
|
||||||
|
if (!m_bPaused)
|
||||||
{
|
{
|
||||||
// 记录当前时间
|
// 记录当前时间
|
||||||
tLast = GetNow();
|
tLast = GetNow();
|
||||||
|
|
@ -253,6 +267,7 @@ void e2d::EApp::_mainLoop()
|
||||||
this->quit();
|
this->quit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 计算挂起时长
|
// 计算挂起时长
|
||||||
|
|
@ -436,7 +451,12 @@ HWND e2d::EApp::getHWnd()
|
||||||
return GetHWnd();
|
return GetHWnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::EApp::closeWindow()
|
LONGLONG e2d::EApp::getTotalDurationFromStart()
|
||||||
|
{
|
||||||
|
return GetInterval(s_tStart);
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EApp::hideWindow()
|
||||||
{
|
{
|
||||||
ShowWindow(GetHWnd(), SW_HIDE);
|
ShowWindow(GetHWnd(), SW_HIDE);
|
||||||
}
|
}
|
||||||
|
|
@ -460,11 +480,6 @@ void e2d::EApp::free()
|
||||||
}
|
}
|
||||||
// 删除图片缓存
|
// 删除图片缓存
|
||||||
ESprite::clearCache();
|
ESprite::clearCache();
|
||||||
// 删除所有定时器、监听器和动画
|
|
||||||
ETimerManager::clearAllTimers();
|
|
||||||
EMsgManager::clearAllKeyboardListeners();
|
|
||||||
EMsgManager::clearAllMouseListeners();
|
|
||||||
//ActionManager::clearAllActions();
|
|
||||||
// 删除所有对象
|
// 删除所有对象
|
||||||
EObjectManager::clearAllObjects();
|
EObjectManager::clearAllObjects();
|
||||||
}
|
}
|
||||||
|
|
@ -481,7 +496,7 @@ void e2d::EApp::end()
|
||||||
|
|
||||||
void e2d::EApp::_enterNextScene()
|
void e2d::EApp::_enterNextScene()
|
||||||
{
|
{
|
||||||
// 执行当前场景的 onExit 函数
|
// 执行当前场景的 onCloseWindow 函数
|
||||||
if (m_pCurrentScene)
|
if (m_pCurrentScene)
|
||||||
{
|
{
|
||||||
m_pCurrentScene->onExit();
|
m_pCurrentScene->onExit();
|
||||||
|
|
@ -650,10 +665,31 @@ LRESULT e2d::EApp::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam
|
||||||
wasHandled = true;
|
wasHandled = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// 窗口激活消息
|
||||||
|
case WM_ACTIVATE:
|
||||||
|
{
|
||||||
|
if (LOWORD(wParam) == WA_INACTIVE)
|
||||||
|
{
|
||||||
|
pEApp->getCurrentScene()->onInactive();
|
||||||
|
pEApp->onInactive();
|
||||||
|
pEApp->m_bPaused = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pEApp->onActivate();
|
||||||
|
pEApp->getCurrentScene()->onActivate();
|
||||||
|
pEApp->m_bPaused = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = 1;
|
||||||
|
wasHandled = true;
|
||||||
|
break;
|
||||||
|
|
||||||
// 窗口关闭消息
|
// 窗口关闭消息
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
{
|
{
|
||||||
if (pEApp->onExit())
|
if (pEApp->getCurrentScene()->onCloseWindow() &&
|
||||||
|
pEApp->onCloseWindow())
|
||||||
{
|
{
|
||||||
DestroyWindow(hWnd);
|
DestroyWindow(hWnd);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,19 @@ void e2d::EScene::onExit()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void e2d::EScene::onActivate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::EScene::onInactive()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::EScene::onCloseWindow()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void e2d::EScene::_onRender()
|
void e2d::EScene::_onRender()
|
||||||
{
|
{
|
||||||
m_Root->_callOn();
|
m_Root->_callOn();
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,7 @@
|
||||||
<ClCompile Include="Node\ENode.cpp" />
|
<ClCompile Include="Node\ENode.cpp" />
|
||||||
<ClCompile Include="Node\ERectangle.cpp" />
|
<ClCompile Include="Node\ERectangle.cpp" />
|
||||||
<ClCompile Include="Node\ESprite.cpp" />
|
<ClCompile Include="Node\ESprite.cpp" />
|
||||||
|
<ClCompile Include="Node\EText.cpp" />
|
||||||
<ClCompile Include="Tool\EObjectManager.cpp" />
|
<ClCompile Include="Tool\EObjectManager.cpp" />
|
||||||
<ClCompile Include="Tool\ETimerManager.cpp" />
|
<ClCompile Include="Tool\ETimerManager.cpp" />
|
||||||
<ClCompile Include="Win\winbase.cpp" />
|
<ClCompile Include="Win\winbase.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,9 @@
|
||||||
<ClCompile Include="Msg\Listener\EKeyboardPressListener.cpp">
|
<ClCompile Include="Msg\Listener\EKeyboardPressListener.cpp">
|
||||||
<Filter>Msg\Listener</Filter>
|
<Filter>Msg\Listener</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Node\EText.cpp">
|
||||||
|
<Filter>Node</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Win\winbase.h">
|
<ClInclude Include="Win\winbase.h">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
#include "..\enodes.h"
|
||||||
|
|
@ -46,8 +46,14 @@ public:
|
||||||
UINT32 fps
|
UINT32 fps
|
||||||
);
|
);
|
||||||
|
|
||||||
// 退出程序时的执行程序
|
// 重写这个函数,它将在窗口激活时执行
|
||||||
virtual bool onExit();
|
virtual void onActivate();
|
||||||
|
|
||||||
|
// 重写这个函数,它将在窗口非激活时执行
|
||||||
|
virtual void onInactive();
|
||||||
|
|
||||||
|
// 重写这个函数,它将在关闭窗口时执行
|
||||||
|
virtual bool onCloseWindow();
|
||||||
|
|
||||||
// 释放所有内存资源
|
// 释放所有内存资源
|
||||||
void free();
|
void free();
|
||||||
|
|
@ -95,6 +101,12 @@ public:
|
||||||
// 获取当前场景
|
// 获取当前场景
|
||||||
static EScene * getCurrentScene();
|
static EScene * getCurrentScene();
|
||||||
|
|
||||||
|
// 获取窗口句柄
|
||||||
|
static HWND getHWnd();
|
||||||
|
|
||||||
|
// 获取从游戏开始到当前经过的毫秒数
|
||||||
|
static LONGLONG getTotalDurationFromStart();
|
||||||
|
|
||||||
// 获取 AppName
|
// 获取 AppName
|
||||||
static EString getAppName();
|
static EString getAppName();
|
||||||
|
|
||||||
|
|
@ -113,11 +125,8 @@ public:
|
||||||
bool value
|
bool value
|
||||||
);
|
);
|
||||||
|
|
||||||
// 获取窗口句柄
|
|
||||||
static HWND getHWnd();
|
|
||||||
|
|
||||||
// 隐藏窗口
|
// 隐藏窗口
|
||||||
static void closeWindow();
|
static void hideWindow();
|
||||||
|
|
||||||
// 显示窗口
|
// 显示窗口
|
||||||
static void showWindow();
|
static void showWindow();
|
||||||
|
|
@ -166,6 +175,7 @@ protected:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool m_bRunning;
|
bool m_bRunning;
|
||||||
|
bool m_bPaused;
|
||||||
EString m_sTitle;
|
EString m_sTitle;
|
||||||
EString m_sAppName;
|
EString m_sAppName;
|
||||||
EColor m_ClearColor;
|
EColor m_ClearColor;
|
||||||
|
|
@ -191,6 +201,15 @@ public:
|
||||||
// 重写这个函数,它将在离开这个场景时自动执行
|
// 重写这个函数,它将在离开这个场景时自动执行
|
||||||
virtual void onExit();
|
virtual void onExit();
|
||||||
|
|
||||||
|
// 重写这个函数,它将在窗口激活时执行
|
||||||
|
virtual void onActivate();
|
||||||
|
|
||||||
|
// 重写这个函数,它将在窗口非激活时执行
|
||||||
|
virtual void onInactive();
|
||||||
|
|
||||||
|
// 重写这个函数,它将在关闭窗口时执行
|
||||||
|
virtual bool onCloseWindow();
|
||||||
|
|
||||||
// 添加子节点到场景
|
// 添加子节点到场景
|
||||||
void add(
|
void add(
|
||||||
ENode * child,
|
ENode * child,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue