更新于 

场景管理及动态加载

切换场景

场景切换

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)
    • 清理常驻节点属性
    • 清理之后几点依旧会存在于当前的场景中