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