场景管理及动态加载
切换场景
场景切换
cocos中场景文件的后缀是fire
1 | cc.director.loadScene( sceneName:string, onLaunched:function ) |
参数:
- sceneName 要加载的场景名称
- onLaunched 回调函数
loadScene调用后进行如下操作:
- 加载新场景
- 销毁当前场景
- 切换新场景
预加载场景
预加载场景
当游戏场景比较大时,直接进行场景加载和切换,加载时游戏可能会卡住一段时间,影响游玩体验,
所以需要对较大的场景进行预加载,
预加载的时机可以选在玩家移动到某一范围内时,对其可能触发切换的场景进行预加载,
cocos中,使用preLoadScene进行场景预加载,
加载后需要手动进行切换:
1 | cc.director.preLoadScene( sceneName:string, onProgress:function, onLoaded:function) |
参数:
- sceneName 目标场景名称
- onProgress 加载进度发生改变的回调函数,可以在这里操作场景预加载的进度条
- 参数1:completedCount:number 已经加载的资源个数
- 参数2:totalCount:number 场景总资源个数
- 参数3:item:any 流出加载管道的最新项目
- onLoad 加载完成的回调函数
- 唯一参数: error:Error 加载出错时的信息
常驻节点
常驻节点
cocos中scene的切换会摧毁旧场景中的所有节点,
不会保存旧场景中的任何数据,
实际上,有些数据是需要在多个场景之间常驻存在,这些数据一般都由一个数据存储组件进行保留,
这种组件一般称为“常驻节点”,
常驻节点在场景切换时不会被自动销毁。
常驻节点的操作使用到下面2个API:
- cc.game.addPresistRootNode(node)
- 添加常驻节点
- cc.game.removePresistRootNode(node)
- 清理常驻节点属性
- 清理之后几点依旧会存在于当前的场景中