游戏引擎从零开始(2)-增加Application和入口

前言

前面花几篇文章把整体的框架搭建好,稍安勿躁。

本章节在引擎内增加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和入口

相关推荐
wind100321 天前
DLSS5 开启保姆级教程:RTX20/30/40 显卡通用 鸣潮 / 异环 / 绝区零全适配
游戏·电脑·英伟达·dlss·鸣潮
全速向光2 天前
JoiPlay 模拟器:在手机上畅玩你所热爱的独立游戏
游戏·智能手机
yangmu32032 天前
《黎明行者之血》MOD整合包保姆级安装与使用指南
游戏·游戏程序
Jgch223 天前
出海Facebook广告账户怎么选?
游戏·facebook
长脖鹿Johnny3 天前
游戏输入系统框架设计(三):网络输入权威与可验证性
网络·游戏·游戏开发·架构设计·输入系统·网络同步
谈资一本本3 天前
电脑全能修复大师 Gilisoft Total Repair,智能检测修复系统、应用、游戏问题!DLL、DirectX、.NET运行库损坏修复+缺失自动补齐!
游戏·电脑·.net
程序员-Benothing3 天前
H3 Max开放世界RPG:AI原生游戏,从“能生成“到“能玩“差了多远
游戏·ai-native
CoderYanger4 天前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
无别0524 天前
【做游戏】做完游戏Demo后没地方发布?
游戏·玩游戏
lilian2334 天前
HarmonyOS 7 新特性(二十九)|游戏伴随服务:悬浮协作与质量降级
游戏·语音识别·harmonyos