window.onWebViewMessage = function(data){ let name= data.funName; //比如下面请求了gameInit ,这里接收app 处理返回的数据 if(name == "onGameInit") { /** * onGameInit * 初始化游戏数据 * gameData : * avatarUrl:"",//头像url * avatarBase64Url:"",//base64字符串头像,后面以base64为主 * userName:"", //名字 * gender: 0,//"0:男,1:女" * caloriUnit:10,//每次跳动消耗的卡路里 * calorieParams:{runUnit:10,jumpUnit:20}, //蹦床时候的参数 * device:null 或 {cname:'中文名',ename:'英文名',name:'设备原有名字'}//'当前选择的设备信息,没选择就为空' */ console.log("onGameInit ==",data.gameData); webView.onGameInit(data.gameData); } else if(name == "onUploadInfo") { /** * 上传分数后的返回, * gameData: * {} */ // console.log("onUploadInfo ==",data.gameData); webView.onUploadInfo(data.gameData); } else if(name == "onAiRandomInfo")//获取随机AI 头像 姓名等信息 { /** * 获取ai信息的数据回调 * aiId: 0, //ai的id * aiName: "",//ai 的名字 * aiGender: 0,//"0:男,1:女" * aiType: "",//网名类型 * aiAvatarBase64: ""//base64字符串,头像 */ // console.log("onAiRandomInfo ==",data.gameData); webView.onAiRandomInfo(data.gameData); } else if(name == "onFruitInfo")//获取水果列表 { /** * 获取水果图片信息 * fruitBase64: "",// 水果雪碧图 base64 * unitWidth: 100,// 雪碧图 单张图片宽 * unitHeight: 100,// 雪碧图 单张图片高 * unit: "px",// 雪碧图 单位 * imageStartPosY: 0,// 雪碧图 起始图 Y方向位置 * imageEndPosY: -1200,// 雪碧图 结束图 Y方向位置 * fruitIndexArray: [0,0,0] // 输入卡路里后计算的返回结果,当前的数组 */ // console.log("onFruitInfo ==",data.gameData); webView.onFruitInfo(data.gameData); } else if(name == "onDeviceUpdateData")//蹦床每次操作后传回来的指令 { /** * 设备连接成功后的返回值 * 蹦床的返回数值,有可能两种格式 * gameData:{F:2} , {H:-1,T:0}; //F:0:左 1:右 2:起跳 3:降落 -1: 无状态 T 0--无时间 -1:超时 H 0:左手 1:右手 */ // console.log("onDeviceUpdateData ==",data.gameData); webView.onDeviceUpdateData(data.gameData); } else if(name == "onDeviceState"){ /** * 暂时只返回设备数据连接错误信息 * gamedata = {state: -1, msg: "设备数据错误"} */ // console.log("onDeviceState ==",data.gameData); webView.onDeviceUpdateData(data.gameData); } else if(name == "onDeviceClose"){ /** * 和设备断开连接时候回调 * gamedata = {msg: '设备断开连接。'} */ // console.log("onDeviceClose ==",data.gameData); webView.onDeviceUpdateData(data.gameData); } else if(name == "onUrlToBase64"){ // console.log("onUrlToBase64 ==",data.gameData); webView.onUrlToBase64(data.gameData); } else if (name == "onWatchAccelerometer") { /** * 返回加速计的数据 * { * xAxis * yAxis * zAxis * } */ // console.log("onWatchAcc == ", data.gameData); webView.onWatchAccelerometer(data.gameData); } else if (name == "onWatchOrientation") { /** * 返回加速计的数据 * { * xAxis * yAxis * zAxis * } */ // console.log("onWatchOri == ", data.gameData); webView.onWatchOrientation(data.gameData); } else if(name == "onBoxingPostHit"){ // console.log("onBoxingPostHit == ", data.gameData); webView.onBoxingPostHit(data.gameData); } else if (name == "onQuit") { console.log("onQuit == ", data.gameData); webView.onQuit(data.gameData); } else if (name == "onQuitModal") { console.log("onQuitModal == ", data.gameData); webView.onQuitModal(data.gameData); } else if( name == "onQuitModalListener"){ console.log("onQuitModalListener == ", data.gameData); } }; let webView = { bValid:false, avatarBase64: null, avatarSpriteFrame: null, avatarUrl:'', userName: '', gender: 0, rivalavatarBase64: null, rivalAvatarSpriteFrame: null, rivalavatarUrl:'', rivalUserName: '', rivalGender: 1, listenerArr: [], videoName:'', kCalUnit:0, register(listener)//注册后实现对应的回调函数 可以监听到回调 { //TODO // 要判断对象是否已经注册过,如果存在不注册 this.listenerArr.push(listener); }, unRegister(listener) { //TODO // 要判断对象是否已经注册过,如果存在才可以删除 this.remove(this.listenerArr, listener); }, dispatchEvent(eventName, data)//把所有的监听事件分发给所有接收到回调的节点 { for (let i = 0; i < this.listenerArr.length; i++) { this.listenerArr[i].emit(eventName, data); } }, init(listener,callback) { this.callback = callback; this.bValid = true; this.register(listener);//初始化的时候默认直接注册对象,不需要重复注册. this.gameInitEvent(); }, gameInitEvent() { // 向服务器自己获取初始化信息 uni.postMessage({ data: { funName: "gameInit", gameData: {} } }); }, InitLocal(gameData)//初始化自己的头像,姓名等信息 { this.avatarUrl = gameData.avatarUrl; this.avatarBase64 = gameData.avatarBase64Url; this.userName = gameData.userName; this.gender = gameData.gender; this.videoName = gameData.item.name; this.kCalUnit = gameData.calorieParams.hitUnit; this.callback(); }, uploadInfo(score, gameTime, calorie) {//最后胜利把信息发给服务器记录和统计 uni.postMessage({ data: { funName: "uploadInfo", gameData: { gameScore: score == "" ? 100 : score,//游戏得分 gameTime: gameTime == "" ? 100 : gameTime,//单位秒 calorieBurned: calorie == "" ? 1000 : calorie,//消耗的卡路里 } } }); }, getAiInfo(callback) {//获取随机AI信息 this.callback = callback; uni.postMessage({ data: { funName: "aiRandomInfo", gameData: {} } }) }, getFruitInfo(calorie) {//获取水果 uni.postMessage({ data: { funName: "fruitInfo", gameData: { calorie: 1150 } } }) }, getBase64(url){ uni.postMessage({ data:{ funName:"urlToBase64", gameData:{ url:url } } }) }, onBind() { uni.postMessage({ data: { funName: "openAccelerometer", gameData: {} } }) }, onUnBind() { uni.postMessage({ data: { funName: "closeAccelerometer", gameData: {} } }) }, onBindBoxingPost(){ uni.postMessage({ data: { funName: "bindBoxingPost", gameData: {} } }) }, onModify(){ uni.postMessage({ data: { funName: "setAngleRatio", gameData: { angleRatio:0.5 //z / x 值越小,代表直拳的判断方位越大 } } }) }, onBindHitBoxingPost(){ uni.postMessage({ data: { funName: "bindHitBoxingPost", gameData: {} } }) }, onUnbindHitBoxingPost(){ uni.postMessage({ data: { funName: "unbindHitBoxingPost", gameData: {} } }) }, closeGame(){ uni.postMessage({ data: { funName: "closeGame", gameData: {} } }); }, onAddQuitModalListener(){ uni.postMessage({ data: { funName: "addQuitModal", gameData: {} } }); }, onRemoveQuitModalListener(){ uni.postMessage({ data: { funName: "removeQuitModal", gameData: {} } }); }, indexOf(arr, item) {//判断元素在数组第几位 for (let i = 0; i < arr.length; i++) { if (arr[i] == item) return i; } return -1; }, remove(arr, item) {//移除数组中制定元素 let index = arr.indexOf(item); if (index > -1) { arr.splice(index, 1); } }, // callBack onGameInit(data) { webView.InitLocal(data); webView.dispatchEvent('onGameInit',data); }, onUploadInfo(data) { webView.dispatchEvent('onUploadInfo',data); }, onAiRandomInfo(data) { this.rivalavatarBase64 = data.aiAvatarBase64Url; this.rivalUserName = data.aiName; this.rivalGender = data.aiGender; webView.dispatchEvent('onAiRandomInfo',data); }, onFruitInfo(data) { // this.setImageBase64(data.fruitBase64,function (texture) { // // }); webView.dispatchEvent('onFruitInfo',data); }, onDeviceUpdateData(data) { // if(!window.gameMode) return; // // if(data.F == 0) // { // console.log("F == 0"); // window.gameMode.pConSt1.speedUp(); // // }else if(data.F == 1) // { // console.log("F == 1"); // window.gameMode.pConSt1.speedUp(); // } // else if(data.F == 2) // { // console.log("F == 2"); // window.gameMode.pConSt1.jump(); // } webView.dispatchEvent('onDeviceUpdateData',data); }, onDeviceState(data) { webView.dispatchEvent('onDeviceState',data); }, onDeviceClose(data) { webView.dispatchEvent('onDeviceClose',data); }, onUrlToBase64(data) { webView.dispatchEvent('onUrlToBase64',data); }, onWatchAccelerometer(data) { /** * 返回加速计的数据 * { * xAxis * yAxis * zAxis * } */ webView.dispatchEvent('onWatchAccelerometer',data); }, onWatchOrientation(data) { /** * 返回加速计的数据 * { * xAxis * yAxis * zAxis * } */ webView.dispatchEvent('onWatchOrientation',data); }, onBoxingPostHit(data) { webView.dispatchEvent('onBoxingPostHit',data); }, onQuit(data) { webView.dispatchEvent('onQuit',data); }, onQuitModal(data) { webView.dispatchEvent('onQuitModal',data); } }; module.exports = webView;