Urho3D引擎框架

DinS          Written on 2017/11/29

接下来几章详细研究Urho3D的各个部分,希望读者已经搭建好了自己的工程

这一章先来研究最最宏观的引擎框架。
打开之前建立的HeloWorld项目,把多余的内容显示代码都去掉,剩下的就是引擎框架:

大图点这里

一一讲解各个部分:

继承Application作为自己的程序入口,这样最简单实用。
应用程序有三个虚函数,我们添加自己的内容都是在这些函数里加。

初始化用到了一个称为context的东西,如何来理解context其实是挺麻烦的一件事。从实用的角度讲,context是沟通引擎各个部分的控制中心,我们一般不直接使用context,但是构造对象时通常会带上context作为参数,语义是将对象加入context,这样其他部分都知道这个对象的存在。

虚函数一:Setup()
这里面主要是设置引擎的初始化参数。

虚函数二:Start()
引擎运行时候的所有代码都是加在这里面。

虚函数三:Stop()
引擎结束后调用,正常、非正常途径退出都会调用这个。

最后的宏的作用是运行程序,这样做保证跨平台有效。小提示:Urho3D引擎不会抛出异常,而是使用返回值来处理错误情况。因此这个宏里也没有try-catch块
如果在代码中要使用异常,确保在main()之前被catch住。

如果我们编译运行这段代码会看到这样:

一片黑,而且按任何键都不起作用,所以只能alt+F4退出。
这是正常的,在不进行任何设置的情况下就是这样。

让我们先来研究一下Setup()
这里面设置初始化参数,那么参数有哪些呢?可参考官网,这里讲解一下常用的参数,看代码:

大图点这里

参数说明还是比较明显了,编译后运行:

build时还可以设置不输出日志。
另外真正的游戏有必要做一个配置文件,然后从配置文件读取初始化参数,这个不详细说了。

Start()是主要的函数,之后的所有专题基本上都是在这里加东西,于是留待后面再说明。
当然你可能奇怪主循环在哪里?这个是由引擎自动完成的,针对用户事件使用event来更新。同样留待后面再说明。

讲讲Stop()
比如写如下代码:

编译后运行,但是使用结束进程的方式非正常退出:

可以看到Out还是写出了:

总结一下,使用Application派生出自己的程序,三个虚函数中Setup()跟引擎初始化参数有关,可以使用ini文件可配置化管理。
Stop()在程序正常、非正常退出时都会执行,是善后的好地方。
Start()是核心,程序的代码都加到这里。
引擎框架就是这么多了。

接下来研究一下urho3d提供的重要数据结构,对于高效使用urho3d至关重要,见《Urho3D数据结构》。