简介
本序列由澳大利亚的一个游戏引擎爱好者整理制作,使用了前瞻的语言技术,
经常多次的修改制作,一个个小的知识点贯通,非常具有引导学习意义!
Bilibili站转载学习,非个人研究,鸣谢!
原作者Github
Bilibili直达链接
YouTube直达链接
#1、编写平台全局定义
#2、配置项目定义
// Core.h
#pragma once
#ifdef AO_PLATFORM_WINDOWS
#ifdef AO_BUILD_DLL
#define AURORA_API __declspec(dllexport)
#else
#define AURORA_API __declspec(dllimport)
#endif
#else
#error Aurora only supports Window!
#endif
#2 Aurora 配置AO_PLATFORM_WINDOWS和AO_BUILD_DLL两个全局预编译宏
Sandbox配置AO_PLATFORM_WINDOWS一个全局预编译宏
#1 编写根节点Runnable
#2 编写程序入口
#3 统一头文件include
#1
// Application.h
#pragma once
#include "Core.h"
namespace Aurora {
class AURORA_API Application
{
public:
Application();
virtual ~Application();
void Run();
};
// 第一次定义全局函数,表示我有这个函数
Application* CreateApplication();
}
// Application.cpp
#include "Application.h"
namespace Aurora
{
Application::Application()
{
}
Application::~Application()
{
}
void Application::Run()
{
while (true);
}
}
#2
// EntryPoint.h
#pragma once
#ifdef AO_PLATFORM_WINDOWS
// 第二次定义重写全局函数,表示我这个函数在其他模块里面被实现
// extern 修饰变量或方法,其变量或方法在其他的地方实现
extern Aurora::Application* Aurora::CreateApplication();
int main(int argc, char** argv)
{
// 执行步骤
// #1 这个项目是dll,Aurora.h在最外层,最先进行编译
// #1 按照Aurora.h的include顺序,依次初始化各个头文件
// #1 到这里的时候已经include stdio.h了
// #2 执行CreateApplication(),程序发现这是个extern,到处找实现,在SandboxApp里面找到了
// #2 然后执行Run,发现Sandbox没有Run方法,去了父类里面找到了Application.cpp里面的实现
printf("ENTRY POINT - MAIN\n");
auto app = Aurora::CreateApplication();
app->Run();
// C++ 的内存管理 new - delete, new[] - delete[]
// 因为上面的代码进入了死循环,所以可以把app给回收掉
delete app;
return 0;
}
#endif
#3
// Aurora.h
#pragma once
// #include "" 和 #include <>的区别
// ""一般包含用户自己写的一些头文件,而<>是包含STL或者第三方标准库的头文件
// .h 文件的位置要和代码执行流程一致
#include <stdio.h>
#include "Aurora/Application.h"
#include "Aurora/EntryPoint.h"
#1 配置额外包含头文件
#2 测试类修改
#1
#2
// SandboxApp.cpp
// 附加的包含目录只会对已经设置的目录当前支持
#include <Aurora.h>
using namespace Aurora;
class Sandbox : public Application
{
public:
Sandbox()
{
}
~Sandbox()
{
}
};
Application* Aurora::CreateApplication()
{
printf("CREATE\n");
return new Sandbox();
}