Cocos Creator(8)---场景跳转

234 阅读2分钟

加载和切换场景

加载场景

方式一

Cocos Creator 中场景就相当于是iOS中的页面,切换场景就是界面跳转。

在 Cocos Creator 中,我们使用场景文件名(不包含扩展名)来索引指代场景。并通过以下接口进行加载和切换操作:

cc.director.loadScene("MyScene");

也可以附加一个参数用来指定场景加载后的回调函数:

cc.director.loadScene("MyScene", onSceneLaunched);

上一行里 onSceneLaunched 就是声明在本脚本中的一个回调函数,在场景加载后可以用来进一步的进行初始化或数据传递的操作。

由于回调函数只能写在本脚本中,所以场景加载回调通常用来配合常驻节点,在常驻节点上挂载的脚本中使用。

方式二

除此之外,从 v2.4 开始 Asset Bundle 还增加了一种新的加载方式:

bundle.loadScene('MyScene', function (err, scene) {
    cc.director.runScene(scene);
});

Asset Bundle 提供的 loadScene 只会加载指定 bundle 中的场景,并不会自动运行场景,还需要使用 cc.director.runScene 来运行场景。
loadScene 还提供了更多参数来控制加载流程,开发者可以自行控制加载参数或者在加载完场景后做一些处理。

更多关于加载 Asset Bundle 中的场景,可参考文档 Asset Bundle

方式一和方式二 的区别在于:
方式一 loadScene('Scence')之后,会直接运行新的场景
方式二 loadScene('Scence', function (err, scene)之后,需要在回调中手动调用runScene才会真正的运行新场景

预加载场景

cc.director.loadScene 会在加载场景之后自动切换运行新场景
其流程大概是: 先判断资源有没有加载完成,如果加载完成,就直接运行新场景,如果没有加载完成,先加载资源,加载完成后,再运行新场景。,这也是为什么场景加载完成的方法是通过回调来执行的。

有些时候我们需要在切换场景的时候,更快更流畅, 我们需要在调用cc.director.loadScene这个方法的时候,减少加载资源的等待时间。那就可以使用预加载来西安加载资源,然后在合适的时候,在加载场景,实现更流畅的效果。

使用 cc.director.preloadScene 接口对场景进行预加载:

cc.director.preloadScene("Scence", function () {
   cc.log("Next scene preloaded"); 
});

然后在合适的时机调用cc.director.loadScene,此时调用时,就不需要加载资源的过程。直接运行新场景。

cc.director.loadScene("Scence");

一般在游戏启动的时候,都有一个加载进度的过程,在这个过程,进行场景预加载是比较合适的。

就算预加载没完成,依旧可以调用 cc.director.loadScene