场景模型进阶-切换场景

DinS          Written on 2018/1/29

一个复杂的游戏肯定会有许多场景,如何在场景之间进行切换就是基本要求了,我们看看Urho3D是如何满足这个要求的。这里演示从纯UI到UI+场景到场景。

从原理上说,UI子系统只有一个,所以无论怎么转换都是那一个子系统,我们做的无非是清掉之前的内容,然后放置新UI。
但是对场景而言情况复杂一点,因为Scene实质上也是Node,所以我们可以有多个Scene,切换场景就需要把之前的清掉,然后初始化新场景并显示。转换到代码上倒不复杂,就是clear和new的问题。但是如何组织多个场景,是程序员需要考虑的问题。

以之前的例子做基础。
首先我们显示纯UI,把一个按钮的回调函数内容改成如下:

大图点这里

所谓切换场景,就干了两件事:
第一个是清空之前的UI,固定写法。
第二个是调用了一个函数,那么这个函数干了什么呢?

大图点这里

没什么特殊的,就是之前我们在Start()里写的代码,拿出来单独放倒一个函数里而已。这里最关键的是new了一个场景。

然后我们再制作一个新场景,代码来自官方示例04_StaticScene。
在private里声明新的SharedPtr<Scene>,然后单独写一个函数初始化该场景。
接下来是如何切换场景,给UI绑定一个新事件如下:

大图点这里

清空UI,老套路。然后我们把SharedPtr<Scene>清空,这样第一个场景就没了。然后调另一个函数,这个函数中最关键的也是new了一个新场景。

大图点这里

然后就可以了,运行下试试看:

第一个UI界面,点击Toggle light 1按钮:

进入熟悉的box场景,再点击UI:

另一个新的场景。

切换场景就这么多了。当然由于是SharePtr,所以即使只有一个Scene对象也可以不停new,可以保证及时清理内存。
不过这样的话组织不同场景就变得麻烦了,所以还是推荐每一个场景独立开。