2021SC@SDUSC
开源游戏引擎 Overload 代码模块分析 之 OvGame(六)—— Core(三)Game
目录
前言
经过之前的几篇探究,咱们终于为本篇的探究部分做好了铺垫。本篇是 OvGame 的 Core 的第三篇,将探究其 Game 部分。
之前的几篇作为铺垫,是因为 Game 包含了 Core 的 Context 与 GameRenderer,并用到了同属 OvGame 模块的 Utils 文件以及 Debug 文件,所以如果读者已经有些遗忘、或是尚未了解过,请先前往 Core(一) 、Core(二) 、Utils 与 Debug(上) 、Debug(下) 阅读。
另外,若想先大致了解该引擎各个大模块,可前往笔者这篇相关文章查看。
若想了解 OvGame 大纲,可前往笔者这篇文章。
分析
1、Game
1.1 Game.h
1.1.1 头文件
#include <OvUI/Modules/Canvas.h>
#include <OvCore/ECS/Components/CCamera.h>
#include "OvGame/Core/Context.h"
#include "OvGame/Core/GameRenderer.h"
#include "OvGame/Utils/FPSCounter.h"
#ifdef _DEBUG
#include "OvGame/Debug/DriverInfo.h"
#include "OvGame/Debug/GameProfiler.h"
#include "OvGame/Debug/FrameInfo.h"
#endif
显然,Game 部分包含了 Overload 其它模块的文件,以及前言中提及的 Core、Utils、Debug 的文件。
1.1.2 主要代码
主要代码是 Game 类,负责处理游戏逻辑。先看它的公有函数,定义如下:
class Game
{
public:
/**
* Create the game
* @param p_context
*/
Game(Context& p_context);
/**
* Destroy the game
*/
~Game();
/**
* Pre-update of the game logic
*/
void PreUpdate();
/**
* Update the game logic
* @param p_deltaTime
*/
void Update(float p_deltaTime);
/**
* Post-update of the game logic
*/
void PostUpdate();
函数功能都有英文注释了,不多赘述,主要是注意三个函数的发生顺序:更新前、开始更新、更新后。接下来看私有变量:
private:
float m_elapsed = 0.0f;
OvGame::Core::Context& m_context;
OvUI::Modules::Canvas m_canvas;
OvGame::Core::GameRenderer m_gameRenderer;
/* Debug elements */
OvGame::Utils::FPSCounter m_fpsCounter;
#ifdef _DEBUG
OvGame