Cocos Creator游戏开发用户体验优化:如何获取并展示加

2020-05-14  本文已影响0人  Thomas游戏圈

有时候,当我们场景上挂载的资源过多时,我们使用cc.director.loadScene切换场景时会等一段时间才会切换过去,这对游戏的体验是相当不好的。所以我们可以使用cc.director.preloadScene来进行预加载,如:

cc.director.preloadScene("sceneName", function () {

cc.director.loadScene("sceneName");

});

同时搭载一个加载进度条来实现显示加载进度,优化游戏体验:

二、 如何获取加载时的进度?

1. Cocos Creator 2.0版本之前

在Cocos creator 2.0版本之前,我们可以使用下面这样的方法:

cc.loader.onProgress = function (completedCount, totalCount, item){

//先开监听

this.loading.progress = completedCount/totalCount;

this.loadLabel.string = Math.floor(completedCount/totalCount * 100) + "%";

}.bind(this);

cc.director.preloadScene("sceneName", function () {

cc.log("加载成功");

});

备注:loading就是你在脚本中绑定的进度条组件。

2. Cocos Creator 2.0版本之后

Cocos creator升级到2.0版本后,onProgress貌似就无法使用了,所以上述那个方法无法获取到加载进度,但是在cc.director.preloadScene这个函数中新增了一个参数:

所以我们可以通过这个参数来获取加载的进度:

cc.director.preloadScene("sceneName", this.onProgress.bind(this), function(){

cc.log("加载成功");

})

onProgress :function(completedCount, totalCount, item){

this.loading.progress = completedCount/totalCount;

this.loadLabel.string = Math.floor(completedCount/totalCount * 100) + "%";

}

三、 源码角度分析本质

其实无论是预加载场景还是加载资源,本质调用的还是cc.loader.load这个api,看底层代码可以知道,源码部分截图如下:

1. 预加载场景

2. 加载资源

而cc.loader.load的内部实现的参数中就是带有这个回调函数的,如下图:

四、 结论

所以我们还可以这样写来获取加载场景的进度:

var info = cc.director._getSceneUuid(this.sceneName);

var self = this;

if (info) {

cc.loader.load({ uuid: info.uuid, type: 'uuid' }, function(completedCount, totalCount, item){

cc.log("已完成Items:" + completedCount);

cc.log("全部Items:" + totalCount);

cc.log("当前Item:" + item.url);

self._loadingNextStep = parseInt(completedCount / totalCount * 100);

cc.log("加载进度:" + self._loadingNextStep);

}, function(error, asset){

if (error) {

cc.errorID(1210, this.sceneName, error.message);

} else {

cc.log("加载完成");

}

}

});

}点击链接加入群聊【unity/cocos交流二群】

上一篇 下一篇

猜你喜欢

热点阅读