刚来cocos不久,发现切换场景或者打开页面超级卡,电脑浏览器的跳转都需要一秒多以上!
这已经是很注意资源优化了,把很多页面都搞成预制体代码预加载,没优化之前都有3秒,在手机上都五秒起步,安卓模拟器更是惊人的卡住二十秒!
再次检查,场景里面只有十几个散图,都是同一个图集的理论上非常快。然后是一个动画animation就没了。
哎!来回捣鼓了几小时,发现还有这个动画,检查发现比较大:
试试将这个独立的动画拖成预制体,然后也使用预加载,速度一下子回来了,50ms就完毕了!
然后说一下我当前使用的预加载:
做个脚本:
var FlyEventMgr = require("FlyEventMgr");
var FlyPrefabsMgr = cc.Class({
extends: cc.Component,
properties: {
_loadedPrefabs: [cc.Node],
},
statics: {
instance: null,
getInstance() {
if (FlyPrefabsMgr.instance == null) {
FlyPrefabsMgr.instance = new FlyPrefabsMgr();
FlyPrefabsMgr.instance.init();
}
return FlyPrefabsMgr.instance;
},
},
init () {
},
//预加载预制体
readyLoadPrefabs (urls) {
let self = this;
if (self._loadedPrefabs == null) {
self._loadedPrefabs = {};
}
if (urls == null) {
urls = ["LoadingView", "BigSkillReady" "FireParticle"];//这里放置一堆你需要提前加载的预制体
}
let loadCount = 0;
for (let i = 0; i < urls.length; i++) {
if (this._loadedPrefabs[urls[i]] != null) {
loadCount++;
self.eventPro(loadCount, urls.length);
}
else {
let url = "prefabs/Fly/" + urls[i];
cc.loader.loadRes(url, function (err, prefab) {
self._loadedPrefabs[urls[i]] = prefab;
loadCount++;//每次加载结束都计数抛事件出去,给loading进度条去接收
self.eventPro(loadCount, urls.length);
});
}
}
},
/**抛事件当前进度*/
eventPro(count, sum) {
let proData = [count, sum];
FlyEventMgr.getInstance().emit("LOAD_PRO", proData);
},
getPrafabByName(name) {
if (this._loadedPrefabs != null && this._loadedPrefabs[name] != null) {
return this._loadedPrefabs[name];
}
console.warn("不存在预加载的预制体:", name);
return null;
},
});
同理,配置/图片资源,都使用这种管理器提前加载。就是不断做这些被大佬取笑的轮子浪费我一天时间!