FlaxEngine学习笔记(二):引擎初始化及相关变量、函数

2021SC@SDUSC

本次博客开始我将正式深入源码进行分析与学习。

首先我们聚焦到FlaxEngine的engine,它是为整个引擎提供资源整合以及系统支援的代码部分,我们进入到GitHub的对应页面,可以看到如下图的文件目录:

 可见全部为C、C++、C#语言。我们对文件做适当分类:

1.全局变量相关:可以看到全局变量定义了引擎用到的对系统整体起作用的变量

 

1)Folder

StartupFolder启动文件夹
TemporaryFolder临时文件夹
ProjectFolder项目文件夹
ProductLocalFolder本地文件夹
BinariesFolder二进制流文件夹
ProjectCacheFolder项目缓存文件夹
EngineContentFolder引擎内容文件夹
ProjectSourceFolder项目源代码文件夹

 2)其他

FatalErrorOccurred是否发生错误
IsRequestingExit是否请求退出
ExitCode退出码
MainThreadID主线程序号

先对这些全局变量心中有数,便可使代码阅读更为通顺。 

2.通过名字可知是引擎基础代码以及相应的服务类

 

先来看看EngineImpl即引擎实现的命名空间 ,I

IsReady  判断游戏引擎是否准备完毕;

RunInBackground  判断背景是否运行;

CommandLine 命令行;

Fps及FpsAccmulatedFrames 帧数的变量;

同时定义三个方法:

InitLog()、InitPaths()、InitMainWindow(),从名字可以看出是对日志、路径、窗口的初始化。

 

令人欣慰的是,接下来我们就看到了熟悉的名词:update、FixedUpdate、LateUpdate(游戏运行时的每帧调用函数及晚更新函数,具体的区别可参考:Unity中Update,FixedUpdate,LateUpdate的区别 - 南山砍柴 - 博客园 (cnblogs.com))、Pause(停止函数)等,可以看出这部分内容关键在于定义引擎中的一些惯用动作,并且会在未来实现,以此体现游戏引擎封装性的特点。

接下来我们看到Main函数的参数时cmdLine的指针,并将其赋值给EngineImpl命名空间的命令行,以此达到对命令行内容的传递,同时调用平台部分的GetCurrentThreadID()(显然是获取当前线程序号的函数)来定义主线程序号,并赋值启动时间。

 

 两个if判断:命令行语法是否出错;

                     平台是否初始化成功;

 

设置启动文件夹 

 

加载游戏信息和项目信息,我们可以看到之前命名空间的初始化函数。 

 

编辑器信息初始化,首先确认项目是否升级 

 

 

接着我们专注于更加具体的初始化逻辑,可以看到这里Flax用时间类中的函数去定义刷新频率(Tick:刷新频率)。 timeToTick为刷新频率,GetNextTick为下一次刷新时间,GetTimeSeconds为据上一次刷新过去的时间,所以剩余刷新时间为GetNextTick()-GetTimeSeconds()。

此处是平台应用程序的停止逻辑,停止后进行一个do-while循环,若仍停止且未退出,则重复平台的刷新及睡眠时间;若应该退出,则直接退出函数体。这个函数的结构很类似生产者和消费者问题的解决模式,即wait()和signal()。

 

 到此,基本上就是FlaxEngine引擎启动时的基本信息初始化,其中依然涉及很多别的模块的具体函数,我们之后再具体分析,同时,仍有一些相关函数内容的初始化未涉及,在下一篇博客中我们将聚焦于那一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值