前言
前面花几篇文章把整体的框架搭建好,稍安勿躁。
本章节在引擎内增加Application基类和入口类EntryPoint,业务层增加Application的继承类。另调整部分代码。
先整体看下,文件的增删修改
engine文件夹更名为->Hazel
删掉了Test类,将Application移到引擎内的Hazel文件夹内
增加Application & 入口EntryPoint
Hazel引擎里的Application基类
先删掉上一节中 Sandbox中临时的Application文件。和引擎里的Application不是一回事。
Application是一个基类,负责整个渲染Loop、日志、资源初始化等操作,相当于引擎运行时的入口。
在业务工程Sandbox内有SandboxApp类,继承自Application,实现业务自己特殊的逻辑。
游戏引擎内都会有一个Run函数,实现一个大的Loop循环,定时的更新状态、处理输入、渲染上屏。
Application头文件,声明Run()函数,和一个CreateApplication()函数。
Hazel/src/Hazel/Application.h
c++
#ifndef SANBOX_APPLICATION_H
#define SANBOX_APPLICATION_H
namespace Hazel{
class Application {
public:
Application();
virtual ~Application();
void Run();
};
Application* CreateApplication();
}
#endif //SANBOX_APPLICATION_H
Hazel/src/Hazel/Application.cpp
c++
#include "Application.h"
namespace Hazel{
Application::Application() {
}
Application::~Application() {
}
void Application::Run() {
while(true) {
}
}
}
引擎入口类
将应用的运行封装到EntryPoint.h中,业务方使用引擎的逻辑也包含进来,对业务方透明。
一方面降低业务方使用的难度,另一方面将重要的逻辑内敛到引擎内部。
Hazel/src/Hazel/EntryPoint.h
c++
#ifndef SANBOX_ENTRYPOINT_H
#define SANBOX_ENTRYPOINT_H
#ifdef HZ_PLATFORM_WINDOWS
extern Hazel::Application* Hazel::CreateApplication();
int main(int argc, char** argv) {
auto app = Hazel::CreateApplication();
app->Run();
delete app;
}
#endif
#endif //SANBOX_ENTRYPOINT_H
引擎统一的对外头文件 Hazel.h
方便业务方使用,在引擎里设计一个Hazel.h头文件,将引擎里需要对外输出的头文件统一放到这里。
Hazel/src/Hazel.h
c++
#ifndef SANBOX_HAZEL_H
#define SANBOX_HAZEL_H
#include <stdio.h>
#include "Hazel/Application.h"
#endif //SANBOX_HAZEL_H
// -----Entry Point-------
#include "Hazel/EntryPoint.h"
引擎中的CMakeList.txt
scss
cmake_minimum_required(VERSION 2.8)
project(hazel)
set(SRC_LIST src/Hazel/Application.cpp)
add_library(hazel STATIC ${SRC_LIST})
业务Sandbox里的app实现类
CreateApplication()放到业务app层实现,即由业务决定创建哪个App,可能会有多个选择哟~
c++
#include <Hazel.h>
class Sandbox : public Hazel::Application {
public:
Sandbox(){
}
~Sandbox()
{
}
};
Hazel::Application* Hazel::CreateApplication() {
return new Sandbox();
}
总结
本章节,实现了引擎的Application类和入口类EntryPoint,后续新增加的模块,不断的集成到Application和EntryPoint中。
完整代码参考增加Application和入口