Commit d75d942f authored by 范雪寒's avatar 范雪寒

refactor: 网络部分抽到基类里

parent 5c583207
...@@ -5,1021 +5,963 @@ const { ccclass, property } = cc._decorator; ...@@ -5,1021 +5,963 @@ const { ccclass, property } = cc._decorator;
@ccclass @ccclass
export default class NewClass extends middleLayerBase { export default class NewClass extends middleLayerBase {
callNetworkApiPost(baseUrl, uri, data, callBack) { callNetworkApiGetLocal(baseUrl, uri, data, callBack) {
this.getBaseUrl((baseUrl) => { let queryStr = '?';
const xhr = new XMLHttpRequest(); const params = [];
const url = `${baseUrl}${uri}`; for (const key in data) {
xhr.open("POST", url, true); if (Object.hasOwnProperty.call(data, key)) {
xhr.setRequestHeader('content-type', 'application/json'); params.push(`${key}=${data[key]}`);
xhr.onreadystatechange = () => { }
if (xhr.readyState == 4) { }
callBack(JSON.parse(xhr.responseText)); queryStr += params.join("&");
} const xhr = new XMLHttpRequest();
} xhr.onreadystatechange = () => {
xhr.send(JSON.stringify(data)); if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) {
}); callBack(xhr.responseText);
} }
};
callNetworkApiGet(baseUrl, uri, data, callBack) { const url = `${baseUrl}${uri}${queryStr}`;
this.getBaseUrl((baseUrl) => { console.log('url = ' + url);
let queryStr = '?'; xhr.open('GET', url, true);
const params = []; xhr.setRequestHeader('Access-Control-Request-Private-Network', 'true');
for (const key in data) { xhr.send();
if (Object.hasOwnProperty.call(data, key)) { }
params.push(`${key}=${data[key]}`);
} // 需要预加载的数量
} preloadCount = null;
queryStr += params.join("&"); // 统计已加载的数量
const xhr = new XMLHttpRequest(); loadedCount = null;
xhr.onreadystatechange = () => {
if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) { role;
callBack(xhr.responseText);
} // 统一释放异步资源的方法
}; onLoad() {
const url = `${baseUrl}${uri}${queryStr}`; this.preloadCount = 0;
console.log('url = ' + url); this.loadedCount = 0;
xhr.open('GET', url, true); const uiNode = cc.find('middleLayer/ui');
xhr.send(); uiNode.parent.getComponent(cc.Widget).updateAlignment();
}); const scale = Math.min(
} uiNode.parent.width / uiNode.width,
uiNode.parent.height / uiNode.height,
callNetworkApiGetLocal(baseUrl, uri, data, callBack) { )
let queryStr = '?'; uiNode.scale = scale;
const params = []; initAir(this);
for (const key in data) { // this.preloadAll();
if (Object.hasOwnProperty.call(data, key)) {
params.push(`${key}=${data[key]}`); this.role = 'student';
} }
}
queryStr += params.join("&"); start() {
const xhr = new XMLHttpRequest(); this.node.zIndex = 9999;
xhr.onreadystatechange = () => { cc.game.addPersistRootNode(this.node);
if (xhr.readyState == 4 && (xhr.status >= 200 && xhr.status < 400)) { this.initListener();
callBack(xhr.responseText);
} const addressText = cc.find('middleLayer/ui/address');
}; const str = cc.sys.localStorage.getItem('ip');
const url = `${baseUrl}${uri}${queryStr}`; console.log('str = ' + str);
console.log('url = ' + url); if (str) {
xhr.open('GET', url, true); addressText.getComponent(cc.EditBox).string = str;
xhr.setRequestHeader('Access-Control-Request-Private-Network', 'true'); }
xhr.send();
} const nameText = cc.find('middleLayer/ui/bundleName');
const bundleName = cc.sys.localStorage.getItem('bundleName');
// 需要预加载的数量 if (bundleName) {
preloadCount=null; nameText.getComponent(cc.EditBox).string = bundleName;
// 统计已加载的数量 }
loadedCount=null;
const courseIdNode = cc.find('middleLayer/ui/courseId');
role; const courseId = cc.sys.localStorage.getItem('courseId');
if (courseId) {
// 统一释放异步资源的方法 courseIdNode.getComponent(cc.EditBox).string = courseId;
onLoad() { }
this.preloadCount = 0;
this.loadedCount = 0; global.middleLayer = cc.find('middleLayer').getComponent('middleLayer');
const uiNode = cc.find('middleLayer/ui');
uiNode.parent.getComponent(cc.Widget).updateAlignment(); global.middleLayer.log("middleLayer.log('像这样在这里打log')");
const scale = Math.min( }
uiNode.parent.width / uiNode.width,
uiNode.parent.height / uiNode.height, preloadAll() {
) if ((<any>window).preloadBundleAndSourcesFlag) {
uiNode.scale = scale; // 只加载一次就行了
initAir(this); return;
// this.preloadAll(); }
(<any>window).preloadBundleAndSourcesFlag = true;
this.role = 'student'; cc.find("middleLayer/ui/ProgressLabel").active = true;
} cc.find('middleLayer/ui/loadingProgress').active = true;
let platform = "web_desktop";
getBaseUrl(callback) { if (cc.sys.os == cc.sys.OS_IOS) {
if ((<any>window).air.engineInfo) { platform = "ios";
const { isDev } = JSON.parse((<any>window).air.engineInfo); } else if (cc.sys.os == cc.sys.OS_ANDROID) {
if (isDev == 1) { platform = "android";
callback('https://staging-teach.ireadabc.com'); }
} else { this.callNetworkApiGet(`/api/syllabus/v1/allbundles`, { orgid: 483, platform }, (datastr) => {
callback('https://iteachabc.com'); const data = JSON.parse(datastr);
} if (data.rows && data.rows.length > 0) {
} else { this.preloadCount += data.rows.length;
(<any>window).courseware.getEngineInfo(() => { }
const { isDev } = JSON.parse((<any>window).air.engineInfo); this.callNetworkApiGet(`/api/syllabus/v1/allresources`, { orgid: 483 }, (datastr1) => {
if (isDev == 1) { const data1 = JSON.parse(datastr1);
callback('https://staging-teach.ireadabc.com'); if (data1.rows && data1.rows.length > 0) {
} else { this.preloadCount += data1.rows.length;
callback('https://iteachabc.com'); }
} console.log('data.rows = ' + JSON.stringify(data.rows));
}); this.batchPreloadScene(data.rows);
} this.preloadSource(data1.rows);
} });
});
start() { }
this.node.zIndex = 9999;
cc.game.addPersistRootNode(this.node); preloadSourceImman() {
this.initListener(); // 测试用
cc.find("middleLayer/ui/ProgressLabel").active = true;
const addressText = cc.find('middleLayer/ui/address'); cc.find('middleLayer/ui/loadingProgress').active = true;
const str = cc.sys.localStorage.getItem('ip'); this.callNetworkApiGet(`/api/courseware/v1/getresources`, { courseid: 20894 }, (datastr1) => {
console.log('str = ' + str); const data1 = JSON.parse(datastr1);
if (str) { if (data1.rows && data1.rows.length > 0) {
addressText.getComponent(cc.EditBox).string = str; this.preloadCount += data1.rows.length;
} }
this.log('data1.rows = ' + JSON.stringify(data1.rows));
const nameText = cc.find('middleLayer/ui/bundleName'); this.preloadSource(data1.rows);
const bundleName = cc.sys.localStorage.getItem('bundleName'); });
if (bundleName) { }
nameText.getComponent(cc.EditBox).string = bundleName;
} batchPreloadScene(scenes = []) {
const expects = [
const courseIdNode = cc.find('middleLayer/ui/courseId'); // 'op_03_2',
const courseId = cc.sys.localStorage.getItem('courseId'); // 'OP10_online',
if (courseId) { ];
courseIdNode.getComponent(cc.EditBox).string = courseId; const _this = this;
} let i = 0;
const load = function () {
global.middleLayer = cc.find('middleLayer').getComponent('middleLayer'); const scene = scenes[i];
if (expects.includes(scene.sceneName)) {
global.middleLayer.log("middleLayer.log('像这样在这里打log')"); _this.loadedCount++;
} _this.updateProcessBar();
i++;
preloadAll() { if (i < scenes.length) {
if ((<any>window).preloadBundleAndSourcesFlag) { setTimeout(() => {
// 只加载一次就行了 load();
return; }, 1);
} }
(<any>window).preloadBundleAndSourcesFlag = true; return;
cc.find("middleLayer/ui/ProgressLabel").active = true; }
cc.find('middleLayer/ui/loadingProgress').active = true; cc.assetManager.loadBundle(scene.bondleUrl, { version: scene.version }, (err, bundle) => {
let platform = "web_desktop"; console.log(`${scene.bondleUrl}---场景开始loadBundle----`);
if (cc.sys.os == cc.sys.OS_IOS) { if (!bundle) {
platform = "ios"; _this.loadedCount++;
} else if (cc.sys.os == cc.sys.OS_ANDROID) { _this.updateProcessBar();
platform = "android"; i++;
} if (i < scenes.length) {
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/syllabus/v1/allbundles`, { orgid: 483, platform }, (datastr) => { setTimeout(() => {
const data = JSON.parse(datastr); load();
if (data.rows && data.rows.length > 0) { }, 1);
this.preloadCount += data.rows.length; }
} return;
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/syllabus/v1/allresources`, { orgid: 483 }, (datastr1) => { }
const data1 = JSON.parse(datastr1); bundle.preloadScene(scene.sceneName, () => { }, () => {
if (data1.rows && data1.rows.length > 0) { console.log(`${scene.sceneName}场景预加载结束`);
this.preloadCount += data1.rows.length; _this.loadedCount++;
} _this.updateProcessBar();
console.log('data.rows = ' + JSON.stringify(data.rows)); i++;
this.batchPreloadScene(data.rows); if (i < scenes.length) {
this.preloadSource(data1.rows); setTimeout(() => {
}); load();
}); }, 1);
} }
});
preloadSourceImman() { });
// 测试用 }
cc.find("middleLayer/ui/ProgressLabel").active = true;
cc.find('middleLayer/ui/loadingProgress').active = true; if (scenes && scenes.length > 0) {
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/courseware/v1/getresources`, { courseid: 20894 }, (datastr1) => { load();
const data1 = JSON.parse(datastr1); }
if (data1.rows && data1.rows.length > 0) { }
this.preloadCount += data1.rows.length;
} preloadSource(array) {
this.log('data1.rows = ' + JSON.stringify(data1.rows)); const rows = array || [];
this.preloadSource(data1.rows); const batchLoad = () => {
}); let tempArr = rows.splice(0, 10);
} let len = tempArr.length;
for (let i = 0; i < tempArr.length; i++) {
batchPreloadScene(scenes = []) { cc.assetManager.loadRemote(tempArr[i], (err, texture) => {
const expects = [ if (err) {
// 'op_03_2', console.log(err)
// 'OP10_online', }
]; this.loadedCount++;
const _this = this; this.updateProcessBar();
let i = 0; if (i === len - 1) {
const load = function () { batchLoad();
const scene = scenes[i]; }
if (expects.includes(scene.sceneName)) { });
_this.loadedCount++; }
_this.updateProcessBar(); }
i++; batchLoad();
if (i < scenes.length) { }
setTimeout(() => {
load(); updateProcessBar() {
}, 1); const label = cc.find("middleLayer/ui/ProgressLabel").getComponent(cc.Label);
} const loadingProgress = cc.find('middleLayer/ui/loadingProgress');
return; label.string = `正在加载:${this.loadedCount} / ${this.preloadCount}`;
} if (this.loadedCount > this.preloadCount * 0.99) {
cc.assetManager.loadBundle(scene.bondleUrl, { version: scene.version }, (err, bundle) => { cc.find("middleLayer/ui/ProgressLabel").active = false;
console.log(`${scene.bondleUrl}---场景开始loadBundle----`); loadingProgress.active = false;
if (!bundle) { this.showLog("资源全部加载完成");
_this.loadedCount++; }
_this.updateProcessBar(); loadingProgress.getComponent(cc.ProgressBar).progress = this.loadedCount / this.preloadCount;
i++; }
if (i < scenes.length) {
setTimeout(() => { currentBundleInfo = null;
load(); onHomeworkFinish(callBack, data = null) {
}, 1); console.log('this.courseIndex = ' + JSON.stringify(this.currentBundleInfo));
} if (this.currentBundleInfo.sceneName == 'ls_fly') {
return; const rightCount = data.reduce((preValue, right) => {
} if (right) {
bundle.preloadScene(scene.sceneName, () => { }, () => { return preValue + 1;
console.log(`${scene.sceneName}场景预加载结束`); } else {
_this.loadedCount++; return preValue;
_this.updateProcessBar(); }
i++; }, 0);
if (i < scenes.length) { console.log('rightCount = ' + rightCount);
setTimeout(() => { }
load(); this.showRestartBtn();
}, 1); console.log('onHomeworkFinish: ' + JSON.stringify(data));
} }
});
}); showRestartBtn() {
} const btnRestart = cc.find('middleLayer/BtnRestart');
btnRestart.active = true;
if (scenes && scenes.length > 0) { btnRestart.once('click', () => {
load(); btnRestart.active = false;
} this.loadPageBundle();
} });
}
preloadSource(array) {
const rows = array || []; callMiddleLayerFunction(apiName, data, callback) {
const batchLoad = () => { switch (apiName) {
let tempArr = rows.splice(0, 10); case 'NS_login':
let len = tempArr.length; if (data.userName == 'admin' && data.password == '123456') {
for (let i = 0; i < tempArr.length; i++) { this.showLog('登录成功!');
cc.assetManager.loadRemote(tempArr[i], (err, texture) => { callback('登录成功!');
if (err) { } else {
console.log(err) this.showLog('密码错误!');
} callback('密码错误!');
this.loadedCount++; }
this.updateProcessBar(); break;
if (i === len - 1) { case 'NS_logout':
batchLoad(); this.showLog('登出成功!');
} callback('登出成功!');
}); break;
} case 'NS_select_book':
} if (data.bookId == 10001) {
batchLoad(); this.showLog('选择剧本: ' + data.bookId);
} callback('选择剧本: ' + data.bookId);
} else {
updateProcessBar() { this.showLog('剧本未解锁!');
const label = cc.find("middleLayer/ui/ProgressLabel").getComponent(cc.Label); callback('剧本未解锁!');
const loadingProgress = cc.find('middleLayer/ui/loadingProgress'); }
label.string = `正在加载:${this.loadedCount} / ${this.preloadCount}`; break;
if (this.loadedCount > this.preloadCount * 0.99) { case 'NS_select_stage':
cc.find("middleLayer/ui/ProgressLabel").active = false; if (data.stageId == 10011) {
loadingProgress.active = false; this.showLog('选择关卡: ' + data.stageId);
this.showLog("资源全部加载完成"); callback('选择关卡: ' + data.stageId);
} } else {
loadingProgress.getComponent(cc.ProgressBar).progress = this.loadedCount / this.preloadCount; this.showLog('关卡未解锁!');
} callback('关卡未解锁!');
}
currentBundleInfo = null; break;
onHomeworkFinish(callBack, data = null) { case 'NS_select_event':
console.log('this.courseIndex = ' + JSON.stringify(this.currentBundleInfo)); this.showLog('选择活动:' + data.eventId);
if (this.currentBundleInfo.sceneName == 'ls_fly') { callback('选择活动:' + data.eventId);
const rightCount = data.reduce((preValue, right) => { break;
if (right) { case 'NS_select_game':
return preValue + 1; this.showLog('选择游戏: ' + data.gameId);
} else { callback('选择游戏: ' + data.gameId);
return preValue; break;
} case 'PSQS_get_pass_code':
}, 0); this.showLog('获取验证码: ' + data.phone);
console.log('rightCount = ' + rightCount); callback({ success: true });
} break;
this.showRestartBtn(); case 'PSQS_login':
console.log('onHomeworkFinish: ' + JSON.stringify(data)); this.showLog(`登录/注册: ${data.phone} ${data.code}`);
} callback({
success: true,
showRestartBtn() { userInfo: { // userInfo为空时弹出填写用户信息的页面
const btnRestart = cc.find('middleLayer/BtnRestart'); phone: 13812345678,
btnRestart.active = true; nickName: "小豆梓",
btnRestart.once('click', () => { sex: "girl",
btnRestart.active = false; provice: "辽宁省",
this.loadPageBundle(); city: "大连市",
}); age: '5~8岁',
} grade: '一年级'
},
callMiddleLayerFunction(apiName, data, callback) { bookInfo: [{
switch (apiName) { name: "kind_A",
case 'NS_login': selected: true,
if (data.userName == 'admin' && data.password == '123456') { bookList: [{
this.showLog('登录成功!'); id: 12334,
callback('登录成功!'); coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
} else { duration: "21:33",
this.showLog('密码错误!'); rate: "55%",
callback('密码错误!'); createDate: "2012-12-21"
} }, {
break; id: 12231,
case 'NS_logout': coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
this.showLog('登出成功!'); duration: "21:33",
callback('登出成功!'); readTime: 2,
break; createDate: "2012-12-21"
case 'NS_select_book': }],
if (data.bookId == 10001) { }, {
this.showLog('选择剧本: ' + data.bookId); name: "kind_B",
callback('选择剧本: ' + data.bookId); bookList: [{
} else { id: 12235,
this.showLog('剧本未解锁!'); coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
callback('剧本未解锁!'); duration: "21:33",
} readTime: 1,
break; createDate: "2012-12-21"
case 'NS_select_stage': }],
if (data.stageId == 10011) { }]
this.showLog('选择关卡: ' + data.stageId); });
callback('选择关卡: ' + data.stageId); break;
} else { case 'PSQS_set_user_info':
this.showLog('关卡未解锁!'); this.showLog(`设置用户信息: ${JSON.stringify(data)}`);
callback('关卡未解锁!'); callback({ success: true });
} break;
break; case 'PSQS_scan_code':
case 'NS_select_event': this.showLog(`扫码`);
this.showLog('选择活动:' + data.eventId); callback({
callback('选择活动:' + data.eventId); success: true,
break; bookInfo: [{
case 'NS_select_game': name: "kind_A",
this.showLog('选择游戏: ' + data.gameId); selected: true,
callback('选择游戏: ' + data.gameId); bookList: [{
break; id: 12334,
case 'PSQS_get_pass_code': coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
this.showLog('获取验证码: ' + data.phone); duration: "21:33",
callback({ success: true }); rate: "0%",
break; createDate: "2012-12-21"
case 'PSQS_login': }],
this.showLog(`登录/注册: ${data.phone} ${data.code}`); }, {
callback({ name: "kind_B",
success: true, bookList: [],
userInfo: { // userInfo为空时弹出填写用户信息的页面 }]
phone: 13812345678, });
nickName: "小豆梓", break;
sex: "girl", case 'PSQS_read_book':
provice: "辽宁省", this.showLog('进入课件: ' + data.bookId);
city: "大连市", callback({ success: true });
age: '5~8岁', break;
grade: '一年级' case 'PSQS_get_basic_info':
}, this.showLog('获取基本信息');
bookInfo: [{ callback({
name: "kind_A", version: 'bata 0.9.7',
selected: true, privacyPolicyUrl: 'http://www.baidu.com',
bookList: [{ userAgreement: 'http://www.baidu.com',
id: 12334, });
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", break;
duration: "21:33", case 'PSQS_play_animate_over':
rate: "55%", break;
createDate: "2012-12-21" case 'PSQS_jump_to_question':
}, { break;
id: 12231, case 'PSQS_get_course_info':
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", this.showLog('获取播放骨骼动画模板的信息');
duration: "21:33", const returnData = {
readTime: 2, first: false, // 是不是第一个模板
createDate: "2012-12-21" last: false, // 是不是最后一个模板
}], playTime: 0, // 播放了几次 0:不需要跳题 1:需要跳题
}, { saveData: {}
name: "kind_B", }
bookList: [{ callback(returnData);
id: 12235, break;
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", case 'PSQS_show_rabbit':
duration: "21:33", break;
readTime: 1, case 'PSQS_hide_rabbit':
createDate: "2012-12-21" break;
}], case 'PSQS_logout':
}] callback({ success: true });
}); break;
break; case 'PSQS_get_province':
case 'PSQS_set_user_info': callback(['北京', '上海']);
this.showLog(`设置用户信息: ${JSON.stringify(data)}`); break;
callback({ success: true }); case 'PSQS_get_city':
break; callback(['北京市']);
case 'PSQS_scan_code': break;
this.showLog(`扫码`); case 'PSQS_check_login':
callback({ callback({
success: true, success: true,
bookInfo: [{ userInfo: { // userInfo为空时弹出填写用户信息的页面
name: "kind_A", phone: 13812345678,
selected: true, nickName: "小豆梓",
bookList: [{ sex: "girl",
id: 12334, provice: "辽宁省",
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", city: "大连市",
duration: "21:33", age: '5~8岁',
rate: "0%", grade: '一年级'
createDate: "2012-12-21" },
}], bookInfo: [{
}, { name: "kind_A",
name: "kind_B", bookList: [{
bookList: [], id: 12334,
}] coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
}); duration: "21:33",
break; rate: "55%",
case 'PSQS_read_book': createDate: "2012-12-21"
this.showLog('进入课件: ' + data.bookId); }, {
callback({ success: true }); id: 12231,
break; coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
case 'PSQS_get_basic_info': duration: "21:33",
this.showLog('获取基本信息'); readTime: 2,
callback({ createDate: "2012-12-21"
version: 'bata 0.9.7', }],
privacyPolicyUrl: 'http://www.baidu.com', }, {
userAgreement: 'http://www.baidu.com', name: "kind_B",
}); selected: true,
break; bookList: [{
case 'PSQS_play_animate_over': id: 12235,
break; coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
case 'PSQS_jump_to_question': duration: "21:33",
break; readTime: 1,
case 'PSQS_get_course_info': createDate: "2012-12-21"
this.showLog('获取播放骨骼动画模板的信息'); }],
const returnData = { }]
first: false, // 是不是第一个模板 });
last: false, // 是不是最后一个模板 break;
playTime: 0, // 播放了几次 0:不需要跳题 1:需要跳题 default:
saveData: {} this.showLog('未定义接口: ' + apiName);
} break;
callback(returnData); }
break; }
case 'PSQS_show_rabbit':
break; localMode = false;
case 'PSQS_hide_rabbit':
break; asyncDelayLog(str) {
case 'PSQS_logout': console.log(str);
callback({ success: true }); return new Promise((resolve, reject) => {
break; setTimeout(() => {
case 'PSQS_get_province': resolve(null);
callback(['北京', '上海']); }, 1);
break; });
case 'PSQS_get_city': }
callback(['北京市']);
break; initListener() {
case 'PSQS_check_login': const exitBtn = cc.find('middleLayer/ExitBtn');
callback({ exitBtn.on('click', () => {
success: true, cc.find('middleLayer/BtnRight').active = false;
userInfo: { // userInfo为空时弹出填写用户信息的页面 cc.find('middleLayer/BtnLeft').active = false;
phone: 13812345678,
nickName: "小豆梓", cc.tween(exitBtn)
sex: "girl", .to(0.1, { scaleX: 0.4, scaleY: 0.6 })
provice: "辽宁省", .to(0.1, { scaleX: 0.6, scaleY: 0.4 })
city: "大连市", .to(0.1, { scaleX: 0.5, scaleY: 0.5 })
age: '5~8岁', .call(() => {
grade: '一年级' exitBtn.active = false;
}, cc.game.removePersistRootNode(this.node);
bookInfo: [{ // cc.director.getScene().destroy();
name: "kind_A", cc.audioEngine.stopAll();
bookList: [{ (<any>window).courseware.freeAllOcMethod();
id: 12334, const flag = cc.director.loadScene("debug_shell", (err, scene) => {
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", });
duration: "21:33", if (!flag) {
rate: "55%", // 没有壳的情况下,直接加载中间层场景
createDate: "2012-12-21" cc.director.loadScene("middleLayer_for_debug", (err, scene) => {
}, { });
id: 12231, }
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", })
duration: "21:33", .start();
readTime: 2, });
createDate: "2012-12-21"
}], cc.find('middleLayer/BtnRight').on('click', () => {
}, { this.goNextPage();
name: "kind_B", });
selected: true,
bookList: [{ cc.find('middleLayer/BtnLeft').on('click', () => {
id: 12235, this.goPrePage();
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg", });
duration: "21:33",
readTime: 1, cc.find('middleLayer/ui/BtnOpenOsmo').on('click', () => {
createDate: "2012-12-21" (<any>window).courseware.openOsmo();
}], });
}]
}); cc.find('middleLayer/ui/BtnCloseOsmo').on('click', () => {
break; (<any>window).courseware.closeOsmo();
default: });
this.showLog('未定义接口: ' + apiName);
break; cc.find('middleLayer/ui/BtnOpenRecord').on('click', () => {
} (<any>window).courseware.startRecord(1);
} });
localMode=false; cc.find('middleLayer/ui/BtnCloseRecord').on('click', () => {
(<any>window).courseware.stopRecord(res => {
asyncDelayLog(str) { this.log('--------录音返回结果 stopRecord ------------');
console.log(str); this.log(res)
return new Promise((resolve, reject) => { this.log('------------------------------');
setTimeout(() => { this.log(`录音的文本是${JSON.parse(res).text}`);
resolve(null); this.log(`录音的音频URL是${JSON.parse(res).audioUrl}`);
}, 1); });
}); });
}
cc.find('middleLayer/ui/BtnScanCode').on('click', () => {
initListener() { (<any>window).courseware.startScanCode((res) => {
const exitBtn = cc.find('middleLayer/ExitBtn'); this.showLog(res);
exitBtn.on('click', () => { });
cc.find('middleLayer/BtnRight').active = false; });
cc.find('middleLayer/BtnLeft').active = false;
cc.find('middleLayer/ui/BtnNeedUpdate').on('click', () => {
cc.tween(exitBtn) (<any>window).courseware.needUpdate('检测到更新:', 'http://www.baidu.com', (res) => {
.to(0.1, { scaleX: 0.4, scaleY: 0.6 }) this.showLog(res);
.to(0.1, { scaleX: 0.6, scaleY: 0.4 }) });
.to(0.1, { scaleX: 0.5, scaleY: 0.5 }) });
.call(() => {
exitBtn.active = false; cc.find('middleLayer/ui/BtnOpenTest').on('click', () => {
cc.game.removePersistRootNode(this.node); (<any>window).courseware.startTest('apple');
// cc.director.getScene().destroy(); });
cc.audioEngine.stopAll();
(<any>window).courseware.freeAllOcMethod(); cc.find('middleLayer/ui/BtnCloseTest').on('click', () => {
const flag = cc.director.loadScene("debug_shell", (err, scene) => { (<any>window).courseware.stopTest(res => {
}); this.log('--------录音评测返回结果 stopTest ---------');
if (!flag) { this.log(res)
// 没有壳的情况下,直接加载中间层场景 this.log('------------------------------');
cc.director.loadScene("middleLayer_for_debug", (err, scene) => { this.log(`录音apple的评分是${JSON.parse(res).result.overall}`);
}); this.log(`录音apple的音频URL是${JSON.parse(res).audioUrl}`);
} });
}) });
.start();
}); const BtnStartLocal = cc.find('middleLayer/ui/BtnStartLocal');
BtnStartLocal.on('click', () => {
cc.find('middleLayer/BtnRight').on('click', () => { const addressText = cc.find('middleLayer/ui/address');
this.goNextPage(); const str = addressText.getComponent(cc.EditBox).string;
}); cc.sys.localStorage.setItem('ip', str);
const address = str.split(':')[0];
cc.find('middleLayer/BtnLeft').on('click', () => { const port = str.split(':')[1] || 8081;
this.goPrePage(); this.localMode = true;
}); this.loadLocalBundle(address, port);
this.showWaitingLetters();
cc.find('middleLayer/ui/BtnOpenOsmo').on('click', () => { this.hideUI();
(<any>window).courseware.openOsmo(); this.showDebugUI();
}); });
cc.find('middleLayer/ui/BtnCloseOsmo').on('click', () => { const BtnStartOnline = cc.find('middleLayer/ui/BtnStartOnline');
(<any>window).courseware.closeOsmo(); BtnStartOnline.on('click', () => {
}); const nameText = cc.find('middleLayer/ui/bundleName');
const bundleName = nameText.getComponent(cc.EditBox).string;
cc.find('middleLayer/ui/BtnOpenRecord').on('click', () => { cc.sys.localStorage.setItem('bundleName', bundleName);
(<any>window).courseware.startRecord(1); this.loadOnlineBundle(bundleName);
}); this.showDebugUI();
});
cc.find('middleLayer/ui/BtnCloseRecord').on('click', () => {
(<any>window).courseware.stopRecord(res => { const BtnStartCourseWare = cc.find('middleLayer/ui/BtnStartCourseWare');
this.log('--------录音返回结果 stopRecord ------------'); BtnStartCourseWare.on('click', () => {
this.log(res) const courseIdNode = cc.find('middleLayer/ui/courseId');
this.log('------------------------------'); const courseId = courseIdNode.getComponent(cc.EditBox).string;
this.log(`录音的文本是${JSON.parse(res).text}`); cc.sys.localStorage.setItem('courseId', courseId);
this.log(`录音的音频URL是${JSON.parse(res).audioUrl}`); this.loadOnlineCourseWare(courseId);
}); this.showDebugUI();
}); });
cc.find('middleLayer/ui/BtnScanCode').on('click', () => { const BtnLoad = cc.find('middleLayer/ui/BtnLoad');
(<any>window).courseware.startScanCode((res) => { BtnLoad.on('click', () => {
this.showLog(res);
}); // 测试获取设备信息
}); (<any>window).courseware.getEngineInfo(res => {
this.log('--------getEngineInfo返回结果---------');
cc.find('middleLayer/ui/BtnNeedUpdate').on('click', () => { this.log(res)
(<any>window).courseware.needUpdate('检测到更新:', 'http://www.baidu.com', (res) => { this.log('------------------------------');
this.showLog(res); });
});
}); // 测试预加载资源
// this.preloadCount = 0;
cc.find('middleLayer/ui/BtnOpenTest').on('click', () => { // this.loadedCount = 0;
(<any>window).courseware.startTest('apple'); // cc.find("middleLayer/ui/ProgressLabel").active = true;
}); // cc.find('middleLayer/ui/loadingProgress').active = true;
// // this.preloadAll();
cc.find('middleLayer/ui/BtnCloseTest').on('click', () => { // this.preloadSourceImman();
(<any>window).courseware.stopTest(res => { });
this.log('--------录音评测返回结果 stopTest ---------');
this.log(res) const btnClose = cc.find('middleLayer/ConsoleNode/BtnClose');
this.log('------------------------------'); const btnOpen = cc.find('middleLayer/ConsoleNode/BtnOpen');
this.log(`录音apple的评分是${JSON.parse(res).result.overall}`); const consoleNode = cc.find('middleLayer/ConsoleNode/Console');
this.log(`录音apple的音频URL是${JSON.parse(res).audioUrl}`); const consoleBg = cc.find('middleLayer/ConsoleNode/bg');
}); btnOpen.on('click', () => {
}); btnClose.active = true;
btnOpen.active = false;
const BtnStartLocal = cc.find('middleLayer/ui/BtnStartLocal'); consoleNode.active = true;
BtnStartLocal.on('click', () => { consoleBg.active = true;
const addressText = cc.find('middleLayer/ui/address'); });
const str = addressText.getComponent(cc.EditBox).string;
cc.sys.localStorage.setItem('ip', str); btnClose.on('click', () => {
const address = str.split(':')[0]; btnClose.active = false;
const port = str.split(':')[1] || 8081; btnOpen.active = true;
this.localMode = true; consoleNode.active = false;
this.loadLocalBundle(address, port); consoleBg.active = false;
this.showWaitingLetters(); });
this.hideUI(); }
this.showDebugUI();
}); goPrePage() {
this.goTarIndexPage(this.courseIndex - 1);
const BtnStartOnline = cc.find('middleLayer/ui/BtnStartOnline'); }
BtnStartOnline.on('click', () => { goNextPage() {
const nameText = cc.find('middleLayer/ui/bundleName'); this.goTarIndexPage(this.courseIndex + 1);
const bundleName = nameText.getComponent(cc.EditBox).string; }
cc.sys.localStorage.setItem('bundleName', bundleName); goTarIndexPage(index) {
this.loadOnlineBundle(bundleName); if (!this.courses || index == this.courseIndex || index < 0 || index > this.courses.length - 1) {
this.showDebugUI(); return;
}); }
const BtnStartCourseWare = cc.find('middleLayer/ui/BtnStartCourseWare'); (<any>window).courseware.freeAllOcMethod();
BtnStartCourseWare.on('click', () => {
const courseIdNode = cc.find('middleLayer/ui/courseId'); this.courseIndex = index;
const courseId = courseIdNode.getComponent(cc.EditBox).string; this.courseItem = this.courses[this.courseIndex];
cc.sys.localStorage.setItem('courseId', courseId); if (this.courseIndex == 0) {
this.loadOnlineCourseWare(courseId); cc.find('middleLayer/BtnLeft').active = false;
this.showDebugUI(); } else {
}); cc.find('middleLayer/BtnLeft').active = false;
}
const BtnLoad = cc.find('middleLayer/ui/BtnLoad'); if (this.courseIndex == this.courses.length - 1) {
BtnLoad.on('click', () => { cc.find('middleLayer/BtnRight').active = false;
} else {
// 测试获取设备信息 cc.find('middleLayer/BtnRight').active = true;
(<any>window).courseware.getEngineInfo(res => { }
this.log('--------getEngineInfo返回结果---------'); this.loadPageBundle();
this.log(res) }
this.log('------------------------------'); log(str) {
}); const logStr = `${new Date().toLocaleString()}: ${str}`;
console.log(logStr);
// 测试预加载资源 const content = cc.instantiate(cc.find('middleLayer/ConsoleNode/content'));
// this.preloadCount = 0; content.active = true;
// this.loadedCount = 0; const label = content.getChildByName('label');
// cc.find("middleLayer/ui/ProgressLabel").active = true; label.getComponent(cc.Label).string = logStr;
// cc.find('middleLayer/ui/loadingProgress').active = true; const consoleContent = cc.find('middleLayer/ConsoleNode/Console/content');
// // this.preloadAll(); consoleContent.addChild(content);
// this.preloadSourceImman(); consoleContent.getComponent(cc.Layout).updateLayout();
}); }
hideUI() {
const btnClose = cc.find('middleLayer/ConsoleNode/BtnClose'); cc.find('middleLayer/ui').active = false;
const btnOpen = cc.find('middleLayer/ConsoleNode/BtnOpen'); }
const consoleNode = cc.find('middleLayer/ConsoleNode/Console'); loadOnlineBundle(bundleName) {
const consoleBg = cc.find('middleLayer/ConsoleNode/bg'); this.hideUI();
btnOpen.on('click', () => { this.showWaitingLetters();
btnClose.active = true; this.callNetworkApiGet(`/api/template/v1/${bundleName}`, {}, (datastr) => {
btnOpen.active = false; const data = JSON.parse(datastr);
consoleNode.active = true; let configData = null;
consoleBg.active = true; if (cc.sys.os == cc.sys.OS_IOS) {
}); configData = data.data.conf.ios;
} else if (cc.sys.os == cc.sys.OS_ANDROID) {
btnClose.on('click', () => { configData = data.data.conf.android;
btnClose.active = false; } else {
btnOpen.active = true; configData = data.data.conf.web_desktop;
consoleNode.active = false; }
consoleBg.active = false; const sceneName = configData.sceneName;
}); const version = configData.version;
} const bondleUrl = configData.bondleUrl;
this.loadBundle(sceneName, version, bondleUrl);
goPrePage() { });
this.goTarIndexPage(this.courseIndex - 1); }
} courses = null;
goNextPage() { courseIndex = 0;
this.goTarIndexPage(this.courseIndex + 1); courseItem = null;
} loadOnlineCourseWare(courseId, linkFlag = false) {
goTarIndexPage(index) { this.hideUI();
if (!this.courses || index == this.courseIndex || index < 0 || index > this.courses.length - 1) { this.showWaitingLetters();
return;
} let api = `/api/courseware/v1/${courseId}/list`;
if (linkFlag === true) {
(<any>window).courseware.freeAllOcMethod(); api = `/api/courseware/v1/${courseId}/eq/level/list`;
}
this.courseIndex = index; this.callNetworkApiGet(api, {}, (datastr) => {
this.courseItem = this.courses[this.courseIndex]; const data = JSON.parse(datastr);
if (this.courseIndex == 0) { if (data.rows && data.rows.length > 0) {
cc.find('middleLayer/BtnLeft').active = false; this.courses = data.rows;
} else { this.courseIndex = data.index || 0;
cc.find('middleLayer/BtnLeft').active = false; this.courseItem = data.rows[this.courseIndex];
} }
if (this.courseIndex == this.courses.length - 1) { if (this.courses && this.courses.length > 1 && this.courseIndex <= this.courses.length - 1) {
cc.find('middleLayer/BtnRight').active = false; cc.find('middleLayer/BtnRight').active = true;
} else { }
cc.find('middleLayer/BtnRight').active = true; if (this.courseIndex > 0) {
} cc.find('middleLayer/BtnLeft').active = false;
this.loadPageBundle(); }
} this.reWriteAir();
log(str) { this.loadPageBundle();
const logStr = `${new Date().toLocaleString()}: ${str}`; });
console.log(logStr); }
const content = cc.instantiate(cc.find('middleLayer/ConsoleNode/content')); loadLocalBundle(address, port) {
content.active = true; this.callNetworkApiGetLocal(`http://${address}:${port}`, '/dist/config.json', {}, (datastr) => {
const label = content.getChildByName('label'); const data = JSON.parse(datastr);
label.getComponent(cc.Label).string = logStr; let sceneName = '';
const consoleContent = cc.find('middleLayer/ConsoleNode/Console/content'); let version = '';
consoleContent.addChild(content); let bondleUrl = '';
consoleContent.getComponent(cc.Layout).updateLayout(); if (cc.sys.os == cc.sys.OS_IOS) {
} sceneName = data.ios.sceneName;
hideUI() { version = data.ios.version;
cc.find('middleLayer/ui').active = false; bondleUrl = `http://${address}:${port}/dist/ios/${sceneName}/`;
} } else if (cc.sys.os == cc.sys.OS_ANDROID) {
loadOnlineBundle(bundleName) { sceneName = data.android.sceneName;
this.hideUI(); version = data.android.version;
this.showWaitingLetters(); bondleUrl = `http://${address}:${port}/dist/android/${sceneName}/`;
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/template/v1/${bundleName}`, {}, (datastr) => { } else {
const data = JSON.parse(datastr); sceneName = data.android.sceneName;
let configData = null; version = "";
if (cc.sys.os == cc.sys.OS_IOS) { bondleUrl = `http://${address}:${port}/dist/web_desktop/`;
configData = data.data.conf.ios; }
} else if (cc.sys.os == cc.sys.OS_ANDROID) { this.loadBundle(sceneName, version, bondleUrl);
configData = data.data.conf.android; });
} else { }
configData = data.data.conf.web_desktop; loadPageBundle() {
} let sceneName, version, bondleUrl = "";
const sceneName = configData.sceneName; if (cc.sys.os == cc.sys.OS_IOS) {
const version = configData.version; sceneName = this.courseItem.conf.ios.sceneName;
const bondleUrl = configData.bondleUrl; version = this.courseItem.conf.ios.version;
this.loadBundle(sceneName, version, bondleUrl); bondleUrl = this.courseItem.conf.ios.bondleUrl;
}); } else if (cc.sys.os == cc.sys.OS_ANDROID) {
} sceneName = this.courseItem.conf.android.sceneName;
courses=null; version = this.courseItem.conf.android.version;
courseIndex=0; bondleUrl = this.courseItem.conf.android.bondleUrl;
courseItem=null; } else {
loadOnlineCourseWare(courseId, linkFlag = false) { sceneName = this.courseItem.conf.web_desktop.sceneName;
this.hideUI(); version = this.courseItem.conf.web_desktop.version;
this.showWaitingLetters(); bondleUrl = this.courseItem.conf.web_desktop.bondleUrl;
}
let api = `/api/courseware/v1/${courseId}/list`;
if (linkFlag === true) { this.loadBundle(sceneName, version, bondleUrl);
api = `/api/courseware/v1/${courseId}/eq/level/list`; }
} loadBundle(sceneName, version, bondleUrl) {
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, api, {}, (datastr) => { this.currentBundleInfo = { sceneName, version, bondleUrl };
const data = JSON.parse(datastr); this.showMask();
if (data.rows && data.rows.length > 0) { this.showWaitingLetters();
this.courses = data.rows; cc.assetManager.loadBundle(bondleUrl, { version: version }, async (err, bundle) => {
this.courseIndex = data.index || 0; if (err) {
this.courseItem = data.rows[this.courseIndex]; return this.asyncDelayLog(err);
} }
if (this.courses && this.courses.length > 1 && this.courseIndex <= this.courses.length - 1) { bundle.loadScene(sceneName, null, null, (err, scene) => {
cc.find('middleLayer/BtnRight').active = true; const btnRestart = cc.find('middleLayer/BtnRestart');
} btnRestart.active = false;
if (this.courseIndex > 0) { if (err) {
cc.find('middleLayer/BtnLeft').active = false; this.asyncDelayLog('err: ' + err);
} }
this.reWriteAir(); cc.audioEngine.stopAll();
this.loadPageBundle(); cc.director.runScene(scene, null, () => {
}); console.log('sceneName = ' + sceneName);
} const canvas = cc.find('Canvas');
loadLocalBundle(address, port) { const middleLayer = cc.find('middleLayer');
this.callNetworkApiGetLocal(`http://${address}:${port}`, '/dist/config.json', {}, (datastr) => { cc.find('middleLayer/ExitBtn').active = true;
const data = JSON.parse(datastr); this.hideWaitingLetters();
let sceneName = ''; this.hideMask();
let version = ''; canvas.getComponent(cc.Widget).updateAlignment();
let bondleUrl = ''; middleLayer.scale = canvas.width / middleLayer.width;
if (cc.sys.os == cc.sys.OS_IOS) { // this.showLog('middleLayer.scale = ' + middleLayer.scale);
sceneName = data.ios.sceneName; });
version = data.ios.version; });
bondleUrl = `http://${address}:${port}/dist/ios/${sceneName}/`; });
} else if (cc.sys.os == cc.sys.OS_ANDROID) { }
sceneName = data.android.sceneName;
version = data.android.version; reloadBundle() {
bondleUrl = `http://${address}:${port}/dist/android/${sceneName}/`; const { sceneName, version, bondleUrl } = this.currentBundleInfo;
} else {
sceneName = data.android.sceneName; this.loadBundle(sceneName, version, bondleUrl);
version = ""; }
bondleUrl = `http://${address}:${port}/dist/web_desktop/`;
} showMask() {
this.loadBundle(sceneName, version, bondleUrl); const mask = cc.find('middleLayer/mask');
}); mask.active = true;
} cc.tween(mask)
loadPageBundle() { .set({ opacity: 0 })
let sceneName, version, bondleUrl = ""; .to(0.5, { opacity: 0 })
if (cc.sys.os == cc.sys.OS_IOS) { .start();
sceneName = this.courseItem.conf.ios.sceneName; }
version = this.courseItem.conf.ios.version;
bondleUrl = this.courseItem.conf.ios.bondleUrl; hideMask() {
} else if (cc.sys.os == cc.sys.OS_ANDROID) { const mask = cc.find('middleLayer/mask');
sceneName = this.courseItem.conf.android.sceneName; mask.stopAllActions();
version = this.courseItem.conf.android.version; cc.tween(mask)
bondleUrl = this.courseItem.conf.android.bondleUrl; .set({ opacity: 0 })
} else { .to(0.5, { opacity: 0 })
sceneName = this.courseItem.conf.web_desktop.sceneName; .call(() => {
version = this.courseItem.conf.web_desktop.version; mask.active = false;
bondleUrl = this.courseItem.conf.web_desktop.bondleUrl; })
} .start();
}
this.loadBundle(sceneName, version, bondleUrl);
} reWriteAir() {
loadBundle(sceneName, version, bondleUrl) { (<any>window).courseware.getData = (callback) => {
this.currentBundleInfo = { sceneName, version, bondleUrl }; let data = null;
this.showMask(); if (this.courseItem.data) {
this.showWaitingLetters(); data = JSON.parse(this.courseItem.data);
cc.assetManager.loadBundle(bondleUrl, { version: version }, async (err, bundle) => { }
if (err) { this.log("===成功调用getData===" + this.courseItem.data);
return this.asyncDelayLog(err); callback && callback(data);
} }
bundle.loadScene(sceneName, null, null, (err, scene) => { (<any>window).courseware.nextPage = () => {
const btnRestart = cc.find('middleLayer/BtnRestart'); this.goNextPage();
btnRestart.active = false; }
if (err) { (<any>window).courseware.beforePage = () => {
this.asyncDelayLog('err: '+ err); this.goPrePage();
} }
cc.audioEngine.stopAll(); (<any>window).courseware.sendAnswer = (answerObj) => {
cc.director.runScene(scene, null, () => { this.log("===成功调用sendAnswer===" + JSON.stringify(answerObj));
console.log('sceneName = ' + sceneName); this.callNetworkApiPost(`/api/oxford/courseware/v1/${this.courseItem.id}/saveanswer`, answerObj, (data) => {
const canvas = cc.find('Canvas'); answerObj.callback && answerObj.callback(JSON.stringify(data.row));
const middleLayer = cc.find('middleLayer'); });
cc.find('middleLayer/ExitBtn').active = true; }
this.hideWaitingLetters(); (<any>window).courseware.getAnswer = (queryObj, callback) => {
this.hideMask(); this.log("===成功调用getAnswer===" + JSON.stringify(queryObj));
canvas.getComponent(cc.Widget).updateAlignment(); this.callNetworkApiGet(`/api/oxford/courseware/v1/${this.courseItem.id}/getanswer`, queryObj, (datastr) => {
middleLayer.scale = canvas.width / middleLayer.width; const data = JSON.parse(datastr);
// this.showLog('middleLayer.scale = ' + middleLayer.scale); callback && callback(JSON.stringify(data.rows));
}); });
}); }
}); }
}
callNativeFunction(param) {
reloadBundle() { const paramStr = JSON.stringify(param);
const { sceneName, version, bondleUrl } = this.currentBundleInfo; if (cc.sys.isNative && cc.sys.os == cc.sys.OS_IOS) {
return jsb.reflection.callStaticMethod('CocosMng', 'cocosWithNativeProtocol:', paramStr);
this.loadBundle(sceneName, version, bondleUrl); } else if (cc.sys.isNative && cc.sys.os == cc.sys.OS_ANDROID) {
} return jsb.reflection.callStaticMethod('com/iplayabc/cocos/AppActivity', 'cocosWithNativeProtocol', '(Ljava/lang/String;)Ljava/lang/String;', paramStr);
} else if (cc.sys.isNative && cc.sys.os == cc.sys.OS_WINDOWS) {
showMask() { console.log('汪汪汪')
const mask = cc.find('middleLayer/mask'); } else {
mask.active = true; console.error('非源生环境11');
cc.tween(mask) }
.set({ opacity: 0 }) }
.to(0.5, { opacity: 0 })
.start(); isShowWaiting = false;
} showWaitingLetters() {
hideMask() { if (this.isShowWaiting) {
const mask = cc.find('middleLayer/mask'); return;
mask.stopAllActions(); }
cc.tween(mask) this.isShowWaiting = true;
.set({ opacity: 0 })
.to(0.5, { opacity: 0 }) const layout = cc.find('middleLayer/layout');
.call(() => { layout.removeAllChildren();
mask.active = false;
}) const canvas = cc.find("Canvas");
.start(); const bg = layout.addComponent(cc.Graphics);
} bg.fillRect(-canvas.width / 2, -canvas.height / 2, canvas.width, canvas.height);
reWriteAir() {
(<any>window).courseware.getData = (callback) => { const laodingLayer = cc.find('middleLayer/loadingLayer');
let data = null; laodingLayer.active = true;
if (this.courseItem.data) { // const loading = cc.find('middleLayer/loadingLayer/loading');
data = JSON.parse(this.courseItem.data); // const anim = loading.getComponent(cc.Animation)
} // anim.play('loading')
this.log("===成功调用getData===" + this.courseItem.data);
callback && callback(data); const script = cc.find('middleLayer/loadingLayer/progress').getComponent('progressScript');
} script.setProgress(0);
(<any>window).courseware.nextPage = () => {
this.goNextPage(); const id = setInterval(() => {
} // console.log('changeObj.value: ', changeObj.value);
(<any>window).courseware.beforePage = () => { script.setProgress(changeObj.value);
this.goPrePage(); }, 1);
}
(<any>window).courseware.sendAnswer = (answerObj) => { const changeObj = { value: 0 };
this.log("===成功调用sendAnswer===" + JSON.stringify(answerObj)); cc.tween(changeObj)
this.callNetworkApiPost(`http://staging-teach.ireadabc.com`, `/api/oxford/courseware/v1/${this.courseItem.id}/saveanswer`, answerObj, (data) => { .to(5, { value: 0.9 })
answerObj.callback && answerObj.callback(JSON.stringify(data.row)); .call(() => {
}); clearInterval(id);
} })
(<any>window).courseware.getAnswer = (queryObj, callback) => { .start();
this.log("===成功调用getAnswer===" + JSON.stringify(queryObj));
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/oxford/courseware/v1/${this.courseItem.id}/getanswer`, queryObj, (datastr) => {
const data = JSON.parse(datastr);
callback && callback(JSON.stringify(data.rows)); // const colorList = this.getRainbowColorList();
}); // const layout = cc.find('middleLayer/layout');
} // layout.removeAllChildren();
} // layout.active = true;
// const str = 'Now Loading...';
callNativeFunction(param) { // str.split('').forEach((word, idx) => {
const paramStr = JSON.stringify(param); // const node = new cc.Node();
if (cc.sys.isNative && cc.sys.os == cc.sys.OS_IOS) { // const label = node.addComponent(cc.Label);
return jsb.reflection.callStaticMethod('CocosMng', 'cocosWithNativeProtocol:', paramStr); // label.string = word;
} else if (cc.sys.isNative && cc.sys.os == cc.sys.OS_ANDROID) { // node.parent = layout;
return jsb.reflection.callStaticMethod('com/iplayabc/cocos/AppActivity', 'cocosWithNativeProtocol', '(Ljava/lang/String;)Ljava/lang/String;', paramStr); // node.color = colorList[idx];
} else if (cc.sys.isNative && cc.sys.os == cc.sys.OS_WINDOWS) { // cc.tween(node)
console.log('汪汪汪') // .delay(idx / 4)
} else { // .by(0.3, { y: 50 }, { easing: 'sineOut' })
console.error('非源生环境11'); // .by(0.3, { y: -50 }, { easing: 'sineIn' })
} // .delay((str.length - idx) / 4)
} // .union()
// .repeatForever()
isShowWaiting = false; // .start();
showWaitingLetters() { // });
// const totalWidth = layout.children.reduce((width, node, idx) => {
if (this.isShowWaiting) { // return width + node.width;
return; // }, 0);
} // layout.width = totalWidth;
this.isShowWaiting = true;
}
const layout = cc.find('middleLayer/layout');
layout.removeAllChildren(); hideWaitingLetters() {
const canvas = cc.find("Canvas"); const layout = cc.find('middleLayer/layout');
const bg = layout.addComponent(cc.Graphics); layout.active = false;
bg.fillRect(-canvas.width / 2, -canvas.height / 2, canvas.width, canvas.height);
const laodingLayer = cc.find('middleLayer/loadingLayer');
laodingLayer.active = false;
const laodingLayer = cc.find('middleLayer/loadingLayer'); }
laodingLayer.active = true;
// const loading = cc.find('middleLayer/loadingLayer/loading'); logList = [];
// const anim = loading.getComponent(cc.Animation) showLog(str) {
// anim.play('loading') this.logList.push(str);
console.log(str);
const script = cc.find('middleLayer/loadingLayer/progress').getComponent('progressScript');
script.setProgress(0); if (this.logList.length == 1) {
this.showOneLog();
const id = setInterval(() => { }
// console.log('changeObj.value: ', changeObj.value); }
script.setProgress(changeObj.value);
}, 1); showDebugUI() {
cc.find('middleLayer/ConsoleNode/BtnOpen').active = true;
const changeObj = { value: 0 }; }
cc.tween(changeObj)
.to(5, { value: 0.9 }) showOneLog() {
.call(() => { const str = this.logList[0];
clearInterval(id); if (str === undefined) {
}) return;
.start(); }
const node = new cc.Node();
node.anchorX = 0.5;
const label = node.addComponent(cc.RichText);
// const colorList = this.getRainbowColorList(); label.string = `<outline color=black width=3>${str}</outline>`;
// const layout = cc.find('middleLayer/layout'); label.maxWidth = this.node.width / 2;
// layout.removeAllChildren(); node.x = this.node.width / 4;
// layout.active = true; node.y = -this.node.height / 2;
// const str = 'Now Loading...'; node.parent = this.node;
// str.split('').forEach((word, idx) => { cc.tween(node)
// const node = new cc.Node(); .to(5, { y: this.node.height })
// const label = node.addComponent(cc.Label); .removeSelf()
// label.string = word; .start();
// node.parent = layout; setTimeout(() => {
// node.color = colorList[idx]; this.logList.shift();
// cc.tween(node) this.showOneLog();
// .delay(idx / 4) }, 1000);
// .by(0.3, { y: 50 }, { easing: 'sineOut' }) }
// .by(0.3, { y: -50 }, { easing: 'sineIn' })
// .delay((str.length - idx) / 4) exit() {
// .union() cc.game.removePersistRootNode(this.node);
// .repeatForever() cc.director.loadScene("emptyScene", () => {
// .start(); this.callNativeFunction({ name: 'exit', value: '' });
// }); });
// const totalWidth = layout.children.reduce((width, node, idx) => { }
// return width + node.width;
// }, 0); getRainbowColorList() {
// layout.width = totalWidth; return [
cc.color(255, 255, 0),
} cc.color(128, 255, 0),
cc.color(0, 255, 0),
hideWaitingLetters() { cc.color(0, 0, 0),
const layout = cc.find('middleLayer/layout'); cc.color(0, 255, 128),
layout.active = false; cc.color(0, 255, 255),
const laodingLayer = cc.find('middleLayer/loadingLayer'); cc.color(0, 128, 255),
laodingLayer.active = false; cc.color(0, 0, 255),
} cc.color(128, 0, 255),
cc.color(255, 0, 255),
logList = []; cc.color(255, 0, 128),
showLog(str) {
this.logList.push(str); cc.color(255, 0, 0),
console.log(str); cc.color(255, 128, 0),
cc.color(255, 255, 0),
if (this.logList.length == 1) { ];
this.showOneLog(); }
}
}
showDebugUI() {
cc.find('middleLayer/ConsoleNode/BtnOpen').active = true;
}
showOneLog() {
const str = this.logList[0];
if (str === undefined) {
return;
}
const node = new cc.Node();
node.anchorX = 0.5;
const label = node.addComponent(cc.RichText);
label.string = `<outline color=black width=3>${str}</outline>`;
label.maxWidth = this.node.width / 2;
node.x = this.node.width / 4;
node.y = -this.node.height / 2;
node.parent = this.node;
cc.tween(node)
.to(5, { y: this.node.height })
.removeSelf()
.start();
setTimeout(() => {
this.logList.shift();
this.showOneLog();
}, 1000);
}
exit() {
cc.game.removePersistRootNode(this.node);
cc.director.loadScene("emptyScene", () => {
this.callNativeFunction({ name: 'exit', value: '' });
});
}
getRainbowColorList() {
return [
cc.color(255, 255, 0),
cc.color(128, 255, 0),
cc.color(0, 255, 0),
cc.color(0, 0, 0),
cc.color(0, 255, 128),
cc.color(0, 255, 255),
cc.color(0, 128, 255),
cc.color(0, 0, 255),
cc.color(128, 0, 255),
cc.color(255, 0, 255),
cc.color(255, 0, 128),
cc.color(255, 0, 0),
cc.color(255, 128, 0),
cc.color(255, 255, 0),
];
}
} }
import { initAir } from './air';
cc.Class({
extends: cc.Component,
properties: {
},
callNetworkApiPost(baseUrl, uri, data, callBack) {
this.getBaseUrl((baseUrl) => {
const xhr = new XMLHttpRequest();
const url = `${baseUrl}${uri}`;
xhr.open("POST", url, true);
xhr.setRequestHeader('content-type', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState == 4) {
callBack(JSON.parse(xhr.responseText));
}
}
xhr.send(JSON.stringify(data));
});
},
callNetworkApiGet(baseUrl, uri, data, callBack) {
this.getBaseUrl((baseUrl) => {
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();
});
},
callNetworkApiGetLocal(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.setRequestHeader('Access-Control-Request-Private-Network', true);
xhr.send();
},
// 需要预加载的数量
preloadCount: null,
// 统计已加载的数量
loadedCount: null,
// 统一释放异步资源的方法
onLoad() {
this.preloadCount = 0;
this.loadedCount = 0;
const uiNode = cc.find('middleLayer/ui');
uiNode.parent.getComponent(cc.Widget).updateAlignment();
const scale = Math.min(
uiNode.parent.width / uiNode.width,
uiNode.parent.height / uiNode.height,
)
uiNode.scale = scale;
initAir(this);
// this.preloadAll();
this.role = 'student';
},
getBaseUrl(callback) {
if (window.air.engineInfo) {
const { isDev } = JSON.parse(window.air.engineInfo);
if (isDev == 1) {
callback('https://staging-teach.ireadabc.com');
} else {
callback('https://iteachabc.com');
}
} else {
window.courseware.getEngineInfo(() => {
const { isDev } = JSON.parse(window.air.engineInfo);
if (isDev == 1) {
callback('https://staging-teach.ireadabc.com');
} else {
callback('https://iteachabc.com');
}
});
}
},
start() {
this.node.zIndex = 9999;
cc.game.addPersistRootNode(this.node);
this.initListener();
const addressText = cc.find('middleLayer/ui/address');
const str = cc.sys.localStorage.getItem('ip');
console.log('str = ' + str);
if (str) {
addressText.getComponent(cc.EditBox).string = str;
}
const nameText = cc.find('middleLayer/ui/bundleName');
const bundleName = cc.sys.localStorage.getItem('bundleName');
if (bundleName) {
nameText.getComponent(cc.EditBox).string = bundleName;
}
const courseIdNode = cc.find('middleLayer/ui/courseId');
const courseId = cc.sys.localStorage.getItem('courseId');
if (courseId) {
courseIdNode.getComponent(cc.EditBox).string = courseId;
}
global.middleLayer = cc.find('middleLayer').getComponent('middleLayer');
middleLayer.log("middleLayer.log('像这样在这里打log')");
},
preloadAll() {
if (window.preloadBundleAndSourcesFlag) {
// 只加载一次就行了
return;
}
window.preloadBundleAndSourcesFlag = true;
cc.find("middleLayer/ui/ProgressLabel").active = true;
cc.find('middleLayer/ui/loadingProgress').active = 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: 483, platform }, (datastr) => {
const data = JSON.parse(datastr);
if (data.rows && data.rows.length > 0) {
this.preloadCount += data.rows.length;
}
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/syllabus/v1/allresources`, { orgid: 483 }, (datastr1) => {
const data1 = JSON.parse(datastr1);
if (data1.rows && data1.rows.length > 0) {
this.preloadCount += data1.rows.length;
}
console.log('data.rows = ' + JSON.stringify(data.rows));
this.batchPreloadScene(data.rows);
this.preloadSource(data1.rows);
});
});
},
preloadSourceImman() {
// 测试用
cc.find("middleLayer/ui/ProgressLabel").active = true;
cc.find('middleLayer/ui/loadingProgress').active = true;
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/courseware/v1/getresources`, { courseid: 20894 }, (datastr1) => {
const data1 = JSON.parse(datastr1);
if (data1.rows && data1.rows.length > 0) {
this.preloadCount += data1.rows.length;
}
this.log('data1.rows = ' + JSON.stringify(data1.rows));
this.preloadSource(data1.rows);
});
},
batchPreloadScene(scenes = []) {
const expects = [
// 'op_03_2',
// 'OP10_online',
];
const _this = this;
let i = 0;
const load = function () {
const scene = scenes[i];
if (expects.includes(scene.sceneName)) {
_this.loadedCount++;
_this.updateProcessBar();
i++;
if (i < scenes.length) {
setTimeout(() => {
load();
}, 1);
}
return;
}
cc.assetManager.loadBundle(scene.bondleUrl, { version: scene.version }, (err, bundle) => {
console.log(`${scene.bondleUrl}---场景开始loadBundle----`);
if (!bundle) {
_this.loadedCount++;
_this.updateProcessBar();
i++;
if (i < scenes.length) {
setTimeout(() => {
load();
}, 1);
}
return;
}
bundle.preloadScene(scene.sceneName, () => { }, () => {
console.log(`${scene.sceneName}场景预加载结束`);
_this.loadedCount++;
_this.updateProcessBar();
i++;
if (i < scenes.length) {
setTimeout(() => {
load();
}, 1);
}
});
});
}
if (scenes && scenes.length > 0) {
load();
}
},
preloadSource(array) {
const rows = array || [];
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)
}
this.loadedCount++;
this.updateProcessBar();
if (i === len - 1) {
batchLoad();
}
});
}
}
batchLoad();
},
updateProcessBar() {
const label = cc.find("middleLayer/ui/ProgressLabel").getComponent(cc.Label);
const loadingProgress = cc.find('middleLayer/ui/loadingProgress');
label.string = `正在加载:${this.loadedCount} / ${this.preloadCount}`;
if (this.loadedCount > this.preloadCount * 0.99) {
cc.find("middleLayer/ui/ProgressLabel").active = false;
loadingProgress.active = false;
this.showLog("资源全部加载完成");
}
loadingProgress.getComponent(cc.ProgressBar).progress = this.loadedCount / this.preloadCount;
},
onHomeworkFinish(callBack, data = null) {
console.log('this.courseIndex = ' + JSON.stringify(this.currentBundleInfo));
if (this.currentBundleInfo.sceneName == 'ls_fly') {
const rightCount = data.reduce((preValue, right) => {
if (right) {
return preValue + 1;
} else {
return preValue;
}
}, 0);
console.log('rightCount = ' + rightCount);
}
this.showRestartBtn();
console.log('onHomeworkFinish: ' + JSON.stringify(data));
},
showRestartBtn() {
const btnRestart = cc.find('middleLayer/BtnRestart');
btnRestart.active = true;
btnRestart.once('click', () => {
btnRestart.active = false;
this.loadPageBundle();
});
},
callMiddleLayerFunction(apiName, data, callback) {
switch (apiName) {
case 'NS_login':
if (data.userName == 'admin' && data.password == '123456') {
this.showLog('登录成功!');
callback('登录成功!');
} else {
this.showLog('密码错误!');
callback('密码错误!');
}
break;
case 'NS_logout':
this.showLog('登出成功!');
callback('登出成功!');
break;
case 'NS_select_book':
if (data.bookId == 10001) {
this.showLog('选择剧本: ' + data.bookId);
callback('选择剧本: ' + data.bookId);
} else {
this.showLog('剧本未解锁!');
callback('剧本未解锁!');
}
break;
case 'NS_select_stage':
if (data.stageId == 10011) {
this.showLog('选择关卡: ' + data.stageId);
callback('选择关卡: ' + data.stageId);
} else {
this.showLog('关卡未解锁!');
callback('关卡未解锁!');
}
break;
case 'NS_select_event':
this.showLog('选择活动:' + data.eventId);
callback('选择活动:' + data.eventId);
break;
case 'NS_select_game':
this.showLog('选择游戏: ' + data.gameId);
callback('选择游戏: ' + data.gameId);
break;
case 'PSQS_get_pass_code':
this.showLog('获取验证码: ' + data.phone);
callback({ success: true });
break;
case 'PSQS_login':
this.showLog(`登录/注册: ${data.phone} ${data.code}`);
callback({
success: true,
userInfo: { // userInfo为空时弹出填写用户信息的页面
phone: 13812345678,
nickName: "小豆梓",
sex: "girl",
provice: "辽宁省",
city: "大连市",
age: '5~8岁',
grade: '一年级'
},
bookInfo: [{
name: "kind_A",
selected: true,
bookList: [{
id: 12334,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
rate: "55%",
createDate: "2012-12-21"
}, {
id: 12231,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
readTime: 2,
createDate: "2012-12-21"
}],
}, {
name: "kind_B",
bookList: [{
id: 12235,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
readTime: 1,
createDate: "2012-12-21"
}],
}]
});
break;
case 'PSQS_set_user_info':
this.showLog(`设置用户信息: ${JSON.stringify(data)}`);
callback({ success: true });
break;
case 'PSQS_scan_code':
this.showLog(`扫码`);
callback({
success: true,
bookInfo: [{
name: "kind_A",
selected: true,
bookList: [{
id: 12334,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
rate: "0%",
createDate: "2012-12-21"
}],
}, {
name: "kind_B",
bookList: [],
}]
});
break;
case 'PSQS_read_book':
this.showLog('进入课件: ' + data.bookId);
callback({ success: true });
break;
case 'PSQS_get_basic_info':
this.showLog('获取基本信息');
callback({
version: 'bata 0.9.7',
privacyPolicyUrl: 'http://www.baidu.com',
userAgreement: 'http://www.baidu.com',
});
break;
case 'PSQS_play_animate_over':
break;
case 'PSQS_jump_to_question':
break;
case 'PSQS_get_course_info':
this.showLog('获取播放骨骼动画模板的信息');
const returnData = {
first: false, // 是不是第一个模板
last: false, // 是不是最后一个模板
playTime: 0, // 播放了几次 0:不需要跳题 1:需要跳题
saveData: {}
}
callback(returnData);
break;
case 'PSQS_show_rabbit':
break;
case 'PSQS_hide_rabbit':
break;
case 'PSQS_logout':
callback({ success: true });
break;
case 'PSQS_get_province':
callback(['北京', '上海']);
break;
case 'PSQS_get_city':
callback(['北京市']);
break;
case 'PSQS_check_login':
callback({
success: true,
userInfo: { // userInfo为空时弹出填写用户信息的页面
phone: 13812345678,
nickName: "小豆梓",
sex: "girl",
provice: "辽宁省",
city: "大连市",
age: '5~8岁',
grade: '一年级'
},
bookInfo: [{
name: "kind_A",
bookList: [{
id: 12334,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
rate: "55%",
createDate: "2012-12-21"
}, {
id: 12231,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
readTime: 2,
createDate: "2012-12-21"
}],
}, {
name: "kind_B",
selected: true,
bookList: [{
id: 12235,
coverImg: "http://staging-teach.cdn.ireadabc.com/0d332cb2b167feb4204b1d77a6f02ed6.jpg",
duration: "21:33",
readTime: 1,
createDate: "2012-12-21"
}],
}]
});
break;
default:
this.showLog('未定义接口: ' + apiName);
break;
}
},
asyncDelayLog(str) {
console.log(str);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, 1);
});
},
initListener() {
const exitBtn = cc.find('middleLayer/ExitBtn');
exitBtn.on('click', () => {
cc.find('middleLayer/BtnRight').active = false;
cc.find('middleLayer/BtnLeft').active = false;
cc.tween(exitBtn)
.to(0.1, { scaleX: 0.4, scaleY: 0.6 })
.to(0.1, { scaleX: 0.6, scaleY: 0.4 })
.to(0.1, { scaleX: 0.5, scaleY: 0.5 })
.call(() => {
exitBtn.active = false;
cc.game.removePersistRootNode(this.node);
// cc.director.getScene().destroy();
cc.audioEngine.stopAll();
window.courseware.freeAllOcMethod();
const flag = cc.director.loadScene("debug_shell", null, null, (err, scene) => {
});
if (!flag) {
// 没有壳的情况下,直接加载中间层场景
cc.director.loadScene("middleLayer_for_debug", null, null, (err, scene) => {
});
}
})
.start();
});
cc.find('middleLayer/BtnRight').on('click', () => {
this.goNextPage();
});
cc.find('middleLayer/BtnLeft').on('click', () => {
this.goPrePage();
});
cc.find('middleLayer/ui/BtnOpenOsmo').on('click', () => {
window.courseware.openOsmo();
});
cc.find('middleLayer/ui/BtnCloseOsmo').on('click', () => {
window.courseware.closeOsmo();
});
cc.find('middleLayer/ui/BtnOpenRecord').on('click', () => {
window.courseware.startRecord(1);
});
cc.find('middleLayer/ui/BtnCloseRecord').on('click', () => {
window.courseware.stopRecord(res => {
this.log('--------录音返回结果 stopRecord ------------');
this.log(res)
this.log('------------------------------');
this.log(`录音的文本是${JSON.parse(res).text}`);
this.log(`录音的音频URL是${JSON.parse(res).audioUrl}`);
});
});
cc.find('middleLayer/ui/BtnScanCode').on('click', () => {
window.courseware.startScanCode((res) => {
this.showLog(res);
});
});
cc.find('middleLayer/ui/BtnNeedUpdate').on('click', () => {
window.courseware.needUpdate('检测到更新:', 'http://www.baidu.com', (res) => {
this.showLog(res);
});
});
cc.find('middleLayer/ui/BtnOpenTest').on('click', () => {
window.courseware.startTest('apple');
});
cc.find('middleLayer/ui/BtnCloseTest').on('click', () => {
window.courseware.stopTest(res => {
this.log('--------录音评测返回结果 stopTest ---------');
this.log(res)
this.log('------------------------------');
this.log(`录音apple的评分是${JSON.parse(res).result.overall}`);
this.log(`录音apple的音频URL是${JSON.parse(res).audioUrl}`);
});
});
const BtnStartLocal = cc.find('middleLayer/ui/BtnStartLocal');
BtnStartLocal.on('click', () => {
const addressText = cc.find('middleLayer/ui/address');
const str = addressText.getComponent(cc.EditBox).string;
cc.sys.localStorage.setItem('ip', str);
const address = str.split(':')[0];
const port = str.split(':')[0] | 8081;
this.localMode = true;
this.loadLocalBundle(address, port);
this.showWaitingLetters();
this.hideUI();
this.showDebugUI();
});
const BtnStartOnline = cc.find('middleLayer/ui/BtnStartOnline');
BtnStartOnline.on('click', () => {
const nameText = cc.find('middleLayer/ui/bundleName');
const bundleName = nameText.getComponent(cc.EditBox).string;
cc.sys.localStorage.setItem('bundleName', bundleName);
this.loadOnlineBundle(bundleName);
this.showDebugUI();
});
const BtnStartCourseWare = cc.find('middleLayer/ui/BtnStartCourseWare');
BtnStartCourseWare.on('click', () => {
const courseIdNode = cc.find('middleLayer/ui/courseId');
const courseId = courseIdNode.getComponent(cc.EditBox).string;
cc.sys.localStorage.setItem('courseId', courseId);
this.loadOnlineCourseWare(courseId);
this.showDebugUI();
});
const BtnLoad = cc.find('middleLayer/ui/BtnLoad');
BtnLoad.on('click', () => {
// 测试获取设备信息
window.courseware.getEngineInfo(res => {
this.log('--------getEngineInfo返回结果---------');
this.log(res)
this.log('------------------------------');
});
// 测试预加载资源
// this.preloadCount = 0;
// this.loadedCount = 0;
// cc.find("middleLayer/ui/ProgressLabel").active = true;
// cc.find('middleLayer/ui/loadingProgress').active = true;
// // this.preloadAll();
// this.preloadSourceImman();
});
const btnClose = cc.find('middleLayer/ConsoleNode/BtnClose');
const btnOpen = cc.find('middleLayer/ConsoleNode/BtnOpen');
const consoleNode = cc.find('middleLayer/ConsoleNode/Console');
const consoleBg = cc.find('middleLayer/ConsoleNode/bg');
btnOpen.on('click', () => {
btnClose.active = true;
btnOpen.active = false;
consoleNode.active = true;
consoleBg.active = true;
});
btnClose.on('click', () => {
btnClose.active = false;
btnOpen.active = true;
consoleNode.active = false;
consoleBg.active = false;
});
},
goPrePage() {
this.goTarIndexPage(this.courseIndex - 1);
},
goNextPage() {
this.goTarIndexPage(this.courseIndex + 1);
},
goTarIndexPage(index) {
if (!this.courses || index == this.courseIndex || index < 0 || index > this.courses.length - 1) {
return;
}
window.courseware.freeAllOcMethod();
this.courseIndex = index;
this.courseItem = this.courses[this.courseIndex];
if (this.courseIndex == 0) {
cc.find('middleLayer/BtnLeft').active = false;
} else {
cc.find('middleLayer/BtnLeft').active = false;
}
if (this.courseIndex == this.courses.length - 1) {
cc.find('middleLayer/BtnRight').active = false;
} else {
cc.find('middleLayer/BtnRight').active = true;
}
this.loadPageBundle();
},
log(str) {
const logStr = `${new Date().toLocaleString()}: ${str}`;
console.log(logStr);
const content = cc.instantiate(cc.find('middleLayer/ConsoleNode/content'));
content.active = true;
const label = content.getChildByName('label');
label.getComponent(cc.Label).string = logStr;
const consoleContent = cc.find('middleLayer/ConsoleNode/Console/content');
consoleContent.addChild(content);
consoleContent.getComponent(cc.Layout).updateLayout();
},
hideUI() {
cc.find('middleLayer/ui').active = false;
},
loadOnlineBundle(bundleName) {
this.hideUI();
this.showWaitingLetters();
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/template/v1/${bundleName}`, {}, (datastr) => {
const data = JSON.parse(datastr);
let configData = null;
if (cc.sys.os == cc.sys.OS_IOS) {
configData = data.data.conf.ios;
} else if (cc.sys.os == cc.sys.OS_ANDROID) {
configData = data.data.conf.android;
} else {
configData = data.data.conf.web_desktop;
}
const sceneName = configData.sceneName;
const version = configData.version;
const bondleUrl = configData.bondleUrl;
this.loadBundle(sceneName, version, bondleUrl);
});
},
courses: null,
courseIndex: 0,
courseItem: null,
loadOnlineCourseWare(courseId, linkFlag) {
this.hideUI();
this.showWaitingLetters();
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 = data.index || 0;
this.courseItem = data.rows[this.courseIndex];
}
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 = false;
}
this.reWriteAir();
this.loadPageBundle();
});
},
loadLocalBundle(address, port) {
this.callNetworkApiGetLocal(`http://${address}:${port}`, '/dist/config.json', {}, (datastr) => {
const data = JSON.parse(datastr);
let sceneName = '';
let version = '';
let bondleUrl = '';
if (cc.sys.os == cc.sys.OS_IOS) {
sceneName = data.ios.sceneName;
version = data.ios.version;
bondleUrl = `http://${address}:${port}/dist/ios/${sceneName}/`;
} else if (cc.sys.os == cc.sys.OS_ANDROID) {
sceneName = data.android.sceneName;
version = data.android.version;
bondleUrl = `http://${address}:${port}/dist/android/${sceneName}/`;
} else {
sceneName = data.android.sceneName;
version = "";
bondleUrl = `http://${address}:${port}/dist/web_desktop/`;
}
this.loadBundle(sceneName, version, bondleUrl);
});
},
loadPageBundle() {
let sceneName, version, bondleUrl = "";
if (cc.sys.os == cc.sys.OS_IOS) {
sceneName = this.courseItem.conf.ios.sceneName;
version = this.courseItem.conf.ios.version;
bondleUrl = this.courseItem.conf.ios.bondleUrl;
} else if (cc.sys.os == cc.sys.OS_ANDROID) {
sceneName = this.courseItem.conf.android.sceneName;
version = this.courseItem.conf.android.version;
bondleUrl = this.courseItem.conf.android.bondleUrl;
} else {
sceneName = this.courseItem.conf.web_desktop.sceneName;
version = this.courseItem.conf.web_desktop.version;
bondleUrl = this.courseItem.conf.web_desktop.bondleUrl;
}
this.loadBundle(sceneName, version, bondleUrl);
},
loadBundle(sceneName, version, bondleUrl) {
this.currentBundleInfo = { sceneName, version, bondleUrl };
this.showMask();
this.showWaitingLetters();
cc.assetManager.loadBundle(bondleUrl, { version: version }, async (err, bundle) => {
if (err) {
return this.asyncDelayLog(err);
}
bundle.loadScene(sceneName, null, null, (err, scene) => {
const btnRestart = cc.find('middleLayer/BtnRestart');
btnRestart.active = false;
if (err) {
this.asyncDelayLog('err: ', err);
}
cc.audioEngine.stopAll();
cc.director.runScene(scene, null, () => {
console.log('sceneName = ' + sceneName);
const canvas = cc.find('Canvas');
const middleLayer = cc.find('middleLayer');
cc.find('middleLayer/ExitBtn').active = true;
this.hideWaitingLetters();
this.hideMask();
canvas.getComponent(cc.Widget).updateAlignment();
middleLayer.scale = canvas.width / middleLayer.width;
// this.showLog('middleLayer.scale = ' + middleLayer.scale);
});
});
});
},
reloadBundle() {
const { sceneName, version, bondleUrl } = this.currentBundleInfo;
this.loadBundle(sceneName, version, bondleUrl);
},
showMask() {
const mask = cc.find('middleLayer/mask');
mask.active = true;
cc.tween(mask)
.set({ opacity: 0 })
.to(0.5, { opacity: 0 })
.start();
},
hideMask() {
const mask = cc.find('middleLayer/mask');
mask.stopAllActions();
cc.tween(mask)
.set({ opacity: 0 })
.to(0.5, { opacity: 0 })
.call(() => {
mask.active = false;
})
.start();
},
reWriteAir() {
window.courseware.getData = (callback) => {
let data = null;
if (this.courseItem.data) {
data = JSON.parse(this.courseItem.data);
}
this.log("===成功调用getData===" + this.courseItem.data);
callback && callback(data);
}
window.courseware.nextPage = () => {
this.goNextPage();
}
window.courseware.beforePage = () => {
this.goPrePage();
}
window.courseware.sendAnswer = (answerObj) => {
this.log("===成功调用sendAnswer===" + JSON.stringify(answerObj));
this.callNetworkApiPost(`http://staging-teach.ireadabc.com`, `/api/oxford/courseware/v1/${this.courseItem.id}/saveanswer`, answerObj, (data) => {
answerObj.callback && answerObj.callback(JSON.stringify(data.row));
});
}
window.courseware.getAnswer = (queryObj, callback) => {
this.log("===成功调用getAnswer===" + JSON.stringify(queryObj));
this.callNetworkApiGet(`http://staging-teach.ireadabc.com`, `/api/oxford/courseware/v1/${this.courseItem.id}/getanswer`, queryObj, (datastr) => {
const data = JSON.parse(datastr);
callback && callback(JSON.stringify(data.rows));
});
}
},
callNativeFunction(param) {
const paramStr = JSON.stringify(param);
if (cc.sys.isNative && cc.sys.os == cc.sys.OS_IOS) {
return jsb.reflection.callStaticMethod('CocosMng', 'cocosWithNativeProtocol:', paramStr);
} else if (cc.sys.isNative && cc.sys.os == cc.sys.OS_ANDROID) {
return jsb.reflection.callStaticMethod('com/iplayabc/cocos/AppActivity', 'cocosWithNativeProtocol', '(Ljava/lang/String;)Ljava/lang/String;', paramStr);
} else if (cc.sys.isNative && cc.sys.os == cc.sys.OS_WINDOWS) {
console.log('汪汪汪')
} else {
console.error('非源生环境11');
}
},
showWaitingLetters() {
if (this.isShowWaiting) {
return;
}
this.isShowWaiting = true;
const layout = cc.find('middleLayer/layout');
layout.removeAllChildren();
const canvas = cc.find("Canvas");
const bg = layout.addComponent(cc.Graphics);
bg.fillRect(-canvas.width / 2, -canvas.height / 2, canvas.width, canvas.height);
const laodingLayer = cc.find('middleLayer/loadingLayer');
laodingLayer.active = true;
// const loading = cc.find('middleLayer/loadingLayer/loading');
// const anim = loading.getComponent(cc.Animation)
// anim.play('loading')
const script = cc.find('middleLayer/loadingLayer/progress').getComponent('progressScript');
script.setProgress(0);
const id = setInterval(() => {
// console.log('changeObj.value: ', changeObj.value);
script.setProgress(changeObj.value);
}, 1);
const changeObj = { value: 0 };
cc.tween(changeObj)
.to(5, { value: 0.9 })
.call(() => {
clearInterval(id);
})
.start();
// const colorList = this.getRainbowColorList();
// const layout = cc.find('middleLayer/layout');
// layout.removeAllChildren();
// layout.active = true;
// const str = 'Now Loading...';
// str.split('').forEach((word, idx) => {
// const node = new cc.Node();
// const label = node.addComponent(cc.Label);
// label.string = word;
// node.parent = layout;
// node.color = colorList[idx];
// cc.tween(node)
// .delay(idx / 4)
// .by(0.3, { y: 50 }, { easing: 'sineOut' })
// .by(0.3, { y: -50 }, { easing: 'sineIn' })
// .delay((str.length - idx) / 4)
// .union()
// .repeatForever()
// .start();
// });
// const totalWidth = layout.children.reduce((width, node, idx) => {
// return width + node.width;
// }, 0);
// layout.width = totalWidth;
},
hideWaitingLetters() {
const layout = cc.find('middleLayer/layout');
layout.active = false;
const laodingLayer = cc.find('middleLayer/loadingLayer');
laodingLayer.active = false;
},
showLog(str) {
if (!this.logList) {
this.logList = [];
}
this.logList.push(str);
console.log(str);
if (this.logList.length == 1) {
this.showOneLog();
}
},
showDebugUI() {
cc.find('middleLayer/ConsoleNode/BtnOpen').active = true;
},
showOneLog() {
const str = this.logList[0];
if (str === undefined) {
return;
}
const node = new cc.Node();
node.anchorX = 0.5;
const label = node.addComponent(cc.RichText);
label.string = `<outline color=black width=3>${str}</outline>`;
label.maxWidth = this.node.width / 2;
node.x = this.node.width / 4;
node.y = -this.node.height / 2;
node.parent = this.node;
cc.tween(node)
.to(5, { y: this.node.height })
.removeSelf()
.start();
setTimeout(() => {
this.logList.shift();
this.showOneLog();
}, 1000);
},
exit() {
cc.game.removePersistRootNode(this.node);
cc.director.loadScene("emptyScene", () => {
this.callNativeFunction({ name: 'exit', value: '' });
});
},
getRainbowColorList() {
return [
cc.color(255, 255, 0),
cc.color(128, 255, 0),
cc.color(0, 255, 0),
cc.color(0, 0, 0),
cc.color(0, 255, 128),
cc.color(0, 255, 255),
cc.color(0, 128, 255),
cc.color(0, 0, 255),
cc.color(128, 0, 255),
cc.color(255, 0, 255),
cc.color(255, 0, 128),
cc.color(255, 0, 0),
cc.color(255, 128, 0),
cc.color(255, 255, 0),
];
}
});
{
"ver": "1.0.8",
"uuid": "971c9f08-044e-439b-8d32-e6b76be34717",
"isPlugin": false,
"loadPluginInWeb": true,
"loadPluginInNative": true,
"loadPluginInEditor": false,
"subMetas": {}
}
\ No newline at end of file
export class middleLayerBase extends cc.Component { export class middleLayerBase extends cc.Component {
callNetworkApiPost(uri, data, callBack) {
this.getBaseUrl((baseUrl) => {
const xhr = new XMLHttpRequest();
const url = `${baseUrl}${uri}`;
xhr.open("POST", url, true);
xhr.setRequestHeader('content-type', 'application/json');
xhr.onreadystatechange = () => {
if (xhr.readyState == 4) {
callBack(JSON.parse(xhr.responseText));
}
}
xhr.send(JSON.stringify(data));
});
}
callNetworkApiGet(uri, data, callBack) {
this.getBaseUrl((baseUrl) => {
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();
});
}
async getBaseUrl(callback) {
const engineInfo = await this.getEngineInfo();
const { isDev } = JSON.parse(engineInfo);
if (isDev == 1) {
callback('http://staging-openapi.iteachabc.com');
} else {
callback('http://openapi.iteachabc.com');
}
}
getEngineInfo() {
if ((<any>window).air.engineInfo) {
return (<any>window).air.engineInfo;
} else {
return new Promise((resolve, reject) => {
(<any>window).courseware.getEngineInfo(() => {
resolve((<any>window).air.engineInfo);
});
});
}
}
asyncCallNetworkApiGet(apiName, data) {
return new Promise((resolve, reject) => {
this.callNetworkApiGet(apiName, data, (res => {
resolve(res);
}));
});
}
asyncCallNetworkApiPost(uri, data) {
return new Promise((resolve, reject) => {
this.callNetworkApiPost(uri, data, (res) => {
resolve(res);
});
});
}
} }
\ No newline at end of file
declare const global:any = {};
/** !#en /** !#en
The main namespace of Cocos2d-JS, all engine core classes, functions, properties and constants are defined in this namespace. The main namespace of Cocos2d-JS, all engine core classes, functions, properties and constants are defined in this namespace.
!#zh !#zh
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