Commit b0d768b7 authored by liujiangnan's avatar liujiangnan

feat: 预加载

parent 19e7ac6e
......@@ -4,10 +4,6 @@ cc.Class({
extends: cc.Component,
properties: {},
onLoad() {
initAir(this);
},
callNetworkApiPost(uri, data, callBack) {
const xhr = new XMLHttpRequest();
const url = `${this.baseUrl}${uri}`;
......@@ -21,6 +17,33 @@ cc.Class({
xhr.send(JSON.stringify(data));
},
callNetworkApiGet(baseUrl, uri, data, callBack) {
let queryStr = '?';
const params = [];
for (const key in data) {
if (Object.hasOwnProperty.call(data, key)) {
params.push(`${key}=${data[key]}`);
}
}
queryStr += params.join("&");
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
callBack(xhr.responseText);
}
};
const url = `${baseUrl}${uri}${queryStr}`;
console.log('url = ' + url);
xhr.open('GET', url, true);
xhr.send();
},
onLoad() {
initAir(this);
this.preloadBundle();
this.preloadSource();
},
start() {
this.node.zIndex = 9999;
cc.game.addPersistRootNode(this.node);
......@@ -50,33 +73,93 @@ cc.Class({
middleLayer.log("middleLayer.log('像这样在这里打log')");
},
asyncDelayLog(str) {
console.log(str);
return new Promise((resolve, reject) => {
// 需要预加载的数量
preloadCount: 0,
// 统计已加载的数量
loadedCount: 0,
preloadBundle() {
if(window.air.bundleLoaded){
// 限制只加载一次
return;
}
window.air.bundleLoaded = true;
let platform = "web_desktop";
if(cc.sys.os == cc.sys.OS_IOS){
platform = "ios";
} else if (cc.sys.os == cc.sys.OS_ANDROID){
platform = "android";
}
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/syllabus/v1/allbundles`, {orgid: 507, platform}, (datastr) => {
const data = JSON.parse(datastr);
if(data.rows&&data.rows.length>0){
this.preloadCount += data.rows.length;
this.batchPreloadScene(data.rows);
}
});
},
batchPreloadScene(scenes) {
const _this = this;
let i = 0;
const load = function(){
const scene = scenes[i];
cc.assetManager.loadBundle(scene.bondleUrl, {version: scene.version}, (err, bundle) => {
console.log(`${scene.bondleUrl}---场景开始loadBundle----`);
bundle.preloadScene(scene.sceneName, ()=>{}, ()=>{
console.log(`${scene.sceneName}场景预加载结束`);
_this.loadedCount ++;
i++;
if(i<scenes.length){
setTimeout(() => {
resolve();
load();
}, 1);
}
});
});
}
if(scenes && scenes.length>0){
load();
}
},
callNetworkApiGet(baseUrl, uri, data, callBack) {
let queryStr = '?';
for (const key in data) {
if (Object.hasOwnProperty.call(data, key)) {
const value = data[key];
queryStr += `${key}=${value}`;
preloadSource() {
if(window.air.sourceLoaded){
// 限制只加载一次
return;
}
window.air.sourceLoaded = true;
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/syllabus/v1/allresources`, {orgid: 507}, (datastr) => {
const data = JSON.parse(datastr);
const rows = data.rows;
if(rows&&rows.length>0){
this.preloadCount += rows.length;
const batchLoad = () => {
let tempArr = rows.splice(0, 10);
let len = tempArr.length;
for (let i = 0; i < tempArr.length; i++) {
cc.assetManager.loadRemote(tempArr[i], (err, texture) => {
if(err){
console.log(err)
}
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
callBack(xhr.responseText);
this.loadedCount ++;
if (i === len-1) {
batchLoad();
}
};
const url = `${baseUrl}${uri}${queryStr}`;
console.log('url = ' + url);
xhr.open('GET', url, true);
xhr.send();
});
}
}
batchLoad();
}
});
},
asyncDelayLog(str) {
console.log(str);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 1);
});
},
initListener() {
......@@ -227,17 +310,24 @@ cc.Class({
courses: null,
courseIndex: 0,
courseItem: null,
loadOnlineCourseWare(courseId) {
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/courseware/v1/${courseId}/list`, {}, (datastr) => {
loadOnlineCourseWare(courseId, linkFlag) {
let api = `/api/courseware/v1/${courseId}/list`;
if(linkFlag === true) {
api = `/api/courseware/v1/${courseId}/eq/level/list`;
}
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, api, {}, (datastr) => {
const data = JSON.parse(datastr);
if(data.rows&&data.rows.length>0){
this.courses = data.rows;
this.courseIndex = 0;
this.courseItem = data.rows[0];
this.courseIndex = data.index || 0;
this.courseItem = data.rows[this.courseIndex];
}
if(this.courses && this.courses.length>1){
if(this.courses && this.courses.length>1 && this.courseIndex <= this.courses.length-1){
cc.find('middleLayer/BtnRight').active = true;
}
if(this.courseIndex > 0){
cc.find('middleLayer/BtnLeft').active = true;
}
this.reWriteAir();
this.loadPageBundle();
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment