Aurora Engine 游戏引擎入门 02(编写程序入口)


#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一个全局预编译宏
Aurora Engine 游戏引擎入门 02(编写程序入口)_第1张图片


#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 

#include "Aurora/Application.h"

#include "Aurora/EntryPoint.h"

#1 配置额外包含头文件
#2 测试类修改

#1

Aurora Engine 游戏引擎入门 02(编写程序入口)_第2张图片
#2

// SandboxApp.cpp
// 附加的包含目录只会对已经设置的目录当前支持
#include 

using namespace Aurora;

class Sandbox : public Application
{
     
public:
	Sandbox()
	{
     
	}

	~Sandbox()
	{
     
	}
};

Application* Aurora::CreateApplication() 
{
     
	printf("CREATE\n");
	return new Sandbox();
}

你可能感兴趣的:(Aurora,Aurora)