实现方式
- 创建Application文件作为引擎的总控制器
- 通过Application(); ~Application(); Run();实现生命周期的管理
- 创建CreateApplication();函数实现引擎统一调用应用程序
- 定义EntryPoint.h文件实现定义应用程序的入口点
Application文件具体代码
Application.cpp
#include "Application.h"namespace Hazel
{Application::Application(){}Application::~Application(){}void Application::Run(){while (true);}
}
Application.h
#pragma once
#include "Core.h"namespace Hazel
{class HAZEL_API Application{public:Application();virtual ~Application();void Run();};Application* CreateApplication(); // 由用户定义的CreateApplication()函数,返回一个 Hazel::Application 的实例}
EntryPoint.h具体代码
EntryPoint.h
#pragma once#ifdef HZ_PLATFORM_WINDOWS/*Entry Point 入口点定义了应用程序的入口点通过用户定义的 CreateApplication() 函数创建应用程序实例并运行它*/extern Hazel::Application* Hazel::CreateApplication(); // 由用户定义的CreateApplication()函数,返回一个 Hazel::Application 的实例int main(int argc,char** argv) {auto app = Hazel::CreateApplication(); // 创建应用程序实例app->Run();delete app;
}
#endif
具体实现流程
- 程序从引擎内置统一入口启动
- 引擎调用CreateApplication()函数
- Sandbox创建自定义的应用子类实例
- 向上转型为基类指针返回给引擎
- 引擎持有应用对象,完全接管控制权
- 调用 Run() 开启主循环
- 程序持续运行
- 退出时引擎统一析构、释放资源
引擎统一入口运行流程图
flowchart TD1[引擎统一入口 main]2[引擎调用 CreateApplication]3[Sandbox 自定义应用类]4[返回 Application 基类指针]5[引擎获取应用实例]6[执行 Application::Run]7[进入引擎主循环]8[程序结束 释放资源]1 --> 22 --> 33 --> 44 --> 55 --> 66 --> 77 --> 8
