游戏场景切换
第一种方式:直接加载一个新场景
这里指的不是编辑器切换编辑不同的场景,而是游戏运行中,从一个场景切换到另一个场景,比如游戏开始界面场景中点击了“开始游戏"按钮,进而切换到游戏的场景。切换场景有两种方法:
1、直接加载一个新场景
cc.directorloadScene(sceneName:string, onLaunched: function)
其中sceneName是要加载的场景名,
onLaunched是一个回调函数,当新场景加载完成并正常运行后,会调用该回调函数。
一般情况下没有用,但是有些特殊情况下有用,有时候需要把当前场景的某些东西保存下来,比如分数,角色血量。
并且当onLaunched调用之后老的场景就不存在了,就会被直接destroy
新建两个场景(ctrl+n)并保存
在start场景里面新建一个button
、
创建一个脚本并挂载到button组件上,编辑脚本添加事件
添加一个自定义事件gameStart由于是点击事件要加一个Handler, 括号里面可以写参数也可以不写
大括号写场景切换
cc.director这里是小写因为调用的不是类而是对象
loadScene()切换场景的方法,里面有两个参数
第一个参数是场景名“name”
第二个参数是可有可无,这里用一个箭头函数演示
绑定事件
运行
第一个场景
点击后切换场景
验证老场景被销毁掉了
在脚本里面写一个生命周期函数onDestroy()
运行结果
loadScene方法会自动加载新场景,并且在场景加载完成后,会自动切换。
第二种方式:预加载场景
有时候游戏的场景比较大,直接使用loadScene进行切换,可能会卡在原地几秒钟后才能进入新的场景,为了避免这种现象,我们需要对较大的场景进行预加载:
cc.director.preLoadScene(sceneName: string,anProgress: function, onLoaded: function)
其中onProgress是加载进度发生改变的回调函数,可以有三个参数:
completedCount: number已经加载的资源个数。每次加载一个资源它就会回调一次,可以用于进度条百分比。
totalCount: number场景总资源个数。
item: any流出加载管道的最新项目。
onLoaded是加载完成的回调函数,可以有一个参数:
error: Error加载错误信息。
预加载场景,并不会在场景加载完成后,执行切换场景的操作,我们还是需要在代码逻辑中添加loadScene来完成切换。
如何运用
进度条演示
编写脚本
先创建一个ui节点ProgressBar,先让其不显示,当点击开始游戏时就显示。
active代表
预加载场景
第一个参数切换的场景名字
回调函数的内容
计算progress
let progress = completedCount / totalCount
组件类型是cc.progress
它的progress属性等于progress
运行后由于资源很少进度条加载得很快
写一个属性没有加载完是false
加载完成后就是ture
然后将代码放在start()里面
然后当我们点击按钮时需要触发的事件为
判断一下是否真的可以切换
如果是true就可以进行切换场景
最后运行效果是当进度条满了以后点击button就能切换场景。