const GameStatesStatic = require('GameStates'); cc.Class({ extends: cc.Component, properties: { NodeTouchScript:null, Rivel:null, javelin_prefab:{//标枪计距带起点 default:null, type:cc.Prefab }, }, onLoad: function() { this.GameStates = cc.find("Canvas").getComponent("GameStates"); cc.game.setFrameRate(60); var TouchLayout = cc.find("TouchLayout"); this.NodeTouchScript = TouchLayout.getComponent("NodeTouch"); this.Rivel = cc.find("Rivel"); qqNetwork.regMsgCallback(this.onMessage.bind(this)); qqNetwork.enableDebug(); // this.connect(); }, connect: function() { // var ipStr = '127.0.0.1'; var ipStr = '118.190.113.33'; // var ipStr = '139.129.229.113'; if (ipStr.trim().length <= 0) { return; } if (qqNetwork.debugFlag) { qqNetwork.connect(ipStr.trim(),'8181'); } else { qqNetwork.send(qqNetwork.game2Room.gameInit, {openFraming : 1,fpsExpect:5 }); } }, onMessage: function(msgName, msgData) { if (!msgData || !msgName) { return; } // 正式环境没有 if (msgName === "online") { this.addLog("连接成功"); cc.log("onopen------------连接成功",window.qqgame.isRobot); var self = this; this.schedule(function() { self.sendStep1Data(); }, 0.01, 0); return; } // this.addLog(msgName); switch (msgName) { case qqNetwork.room2Game.offline: this.addLog("断开连接"); break; case qqNetwork.room2Game.channelCreated: // 匹配成功 // this.addLog("匹配成功,收到消息" + JSON.stringify(msgData)); // console.log("匹配成功,收到消息" + JSON.stringify(msgData)); this.setNetWorkData(msgData); // if(!qqNetwork.debugFlag) return; // console.log("onopen------------匹配成功,收到消息",window.qqgame.isRobot); // cc.log("匹配 详细信息",msgData); var GameStates = cc.find('Canvas').getComponent('GameStates'); var GameMode = cc.find('Canvas').getComponent('GameMode'); GameStates.bConnect = true; if (1 == msgData.playerInfos[0].seat) { GameStates.bServer = true; var testDate = new Date(); console.log('Server 初始化成功'+testDate.getHours()+":"+testDate.getMinutes()+":"+testDate.getSeconds()+":"+testDate.getMilliseconds()); var randomSkin = cc.find("randomSkin"); randomSkin.getComponent("upDateSkin").setSkinss(GameStatesStatic.myRandomc); cc.find('Rivel').getChildByName('Player').getChildByName('PlayerCollisionLine').destroy(); // cc.log('有没有 StartHUD Server', cc.find("StartHUD")); // cc.find("StartHUD").getComponent("StartHUD").startNetGame(); // // cc.find("StartHUD").getComponent("StartHUD").StartToRun(); this.GameStates.isRobot=window.qqgame.isRobot; console.log('GameStatesStaticisRobot',this.GameStates.isRobot); if (this.GameStates.isRobot) { var StartHUD = cc.find('StartHUD'); StartHUD.getComponent('StartHUD').startNetGame(); // .startNetGame(); } var Hero = cc.find("Hero"); var NetworkSocket = Hero.getComponent('NetworkSocket'); var data = {FunctionName:'isrobot',status:"Server",isRobot:window.qqgame.isRobot}; GameMode.SynchronizationFun(data); } else { var testDate = new Date(); console.log('Client 初始化成功'+testDate.getHours()+":"+testDate.getMinutes()+":"+testDate.getSeconds()+":"+testDate.getMilliseconds()); GameStates.bServer = false; cc.find('Rivel').getChildByName('Player').getChildByName('PlayerCollisionLine').destroy(); // cc.log('有没有 StartHUD Client', cc.find("StartHUD")); // cc.find("StartHUD").getComponent("StartHUD").startNetGame(); // // cc.find("StartHUD").getComponent("StartHUD").StartToRun(); this.GameStates.isRobot=window.qqgame.isRobot; console.log('GameStatesStaticisRobot',this.GameStates.isRobot); if (this.GameStates.isRobot) { var StartHUD = cc.find('StartHUD'); StartHUD.getComponent('StartHUD').startNetGame(); // .startNetGame(); } var Hero = cc.find("Hero"); var NetworkSocket = Hero.getComponent('NetworkSocket'); var data = {FunctionName:'isrobot',status:"Client",isRobot:window.qqgame.isRobot}; GameMode.SynchronizationFun(data); } if(GameStates.bServer) { var myDate = new Date(); var name = myDate.getMilliseconds(); GameStates.HostName = JSON.stringify('ID:'+name); cc.log('HostName:'+GameStates.HostName ); var data = {FunctionName:'HostName',OurName:GameStates.HostName}; GameMode.SynchronizationFun(data); } break; case qqNetwork.room2Game.frameData: this.frameDataControl(msgData); break; case qqNetwork.room2Game.gameStart: // console.log("gameStart,收到消息" + JSON.stringify(msgData)); if(cc.find('Canvas').getComponent(cc.AudioSource) != null){ cc.find('Canvas').getComponent(cc.AudioSource).play(); } var GameMode = cc.find('Canvas').getComponent('GameMode'); var data = {FunctionName:'Frame'}; GameMode.SynchronizationFun(data); // this.sendFrameData("2222"); break; case qqNetwork.room2Game.gameData: // 消息同步 // cc.log("onopen------------消息同步",window.qqgame.isRobot); var myData ; // if(!qqNetwork.debugFlag) return; if (msgData == "gameStart") { return; } myData = JSON.parse(msgData.str); var Hero = cc.find('Hero'); var Rivel = cc.find('Rivel'); var HeroControl = Hero.getComponent('HeroControl'); var RivelControl = Rivel.getComponent('HeroControl'); var RivelPlayerState = Rivel.getComponent('PlayerState'); var GameMode = cc.find('Canvas').getComponent('GameMode'); var GameStates = cc.find('Canvas').getComponent('GameStates'); if('HostName' == myData.FunctionName) { GameStates.HostName = myData.OurName; console.log('HostName:'+GameStates.HostName ); } if('ReadyToRun' == myData.FunctionName) { if(!GameStates.bReadyToRun) { GameStates.bReadyToRun = !GameStates.bReadyToRun; } else { var StartHUD = cc.find('StartHUD'); if (StartHUD!=null) { StartHUD.getComponent('StartHUD').StartToRun(); } } } else if ('StaggerAnimation' == myData.FunctionName) { RivelPlayerState.SyschroAtionArray.push(myData); GameMode.SyncPositionXRange(Rivel,myData.CurrentPositionX); } else if ('SpeedUp' == myData.FunctionName) { RivelPlayerState.SyschroAtionArray.push(myData); GameMode.SyncPositionXRange(Rivel,myData.CurrentPositionX); } else if ('SynchroHeroPositionXAndSpeed' == myData.FunctionName) { RivelPlayerState.HeroPositionX = myData.PositionX; RivelPlayerState.HeroCurrentSpeed = myData.HeroCurrentSpeed; } else if ('myRandomSetSkins' === myData.FunctionName) { // cc.log("调用了 下面的样子",myData.arr); Rivel.getChildByName("Player").getComponent("Charactor").setSkins(myData.arr[1]); Hero.getChildByName("Player").getComponent("Charactor").setSkins(myData.arr[0]); } else if('SetCurrentSpeedAndAnimation'=== myData.FunctionName) { RivelControl.SetCurrentSpeedAndAnimation(myData.Speed); } else if('addScore'==myData.FunctionName) { if(GameMode.bHasAddScore == false){ if(GameStates.bServer){ GameMode.addScore(Rivel); var data = { FunctionName: 'addScore',PlayerName:'Rival'}; GameMode.SynchronizationFun(data); cc.log("--Rival加分啦--") } else{ if(myData.PlayerName == 'Hero'){ GameMode.addScore(Rivel); } if(myData.PlayerName == 'Rival'){ GameMode.addScore(Hero); } } } } else if('SendMyArrivedTime' == myData.FunctionName) { GameMode.RivalArrivedTime = myData.MyArrivedTime;//设置客户端的到达时间 // cc.log("^^^^^我接收到了对手的到达时间^^^^^^^^^^^^^^"); // cc.log("-!!-RivalArrivedHour is "+GameMode.RivalArrivedTime[0]); // cc.log("-!!-RivalArrivedMinutes is "+GameMode.RivalArrivedTime[1]); // cc.log("-!!-RivalArrivedSeconds is "+GameMode.RivalArrivedTime[2]); // cc.log("-!!-RivalArrivedMilliseconds is "+GameMode.RivalArrivedTime[3]); GameMode.AddScoreToOther("Rivel"); } else if('PushPlayerToEnterFinishLinePlayersArray' == myData.FunctionName) { GameStates.EnterFinishLinePlayersArray.push(Rivel); } else if('CheckPlayersDistance' == myData.FunctionName) { GameStates.EnterStartLinePlayersArray.push(Rivel); GameStates.StartLinePositionX=myData.StartLinePositionX; GameMode.CheckPlayersDistance(false); } else if('SetStartLinePositionX' == myData.FunctionName ) { GameStates.StartLinePositionX=myData.StartLinePositionX; //Code added by slam RivelControl.SetSpeedToZeroAndIdle(); RivelControl.node.setPositionX(myData.StartLinePositionX); } else if('ClearEnterFinishLinePlayersArray' == myData.FunctionName) { GameStates.EnterStartLinePlayersArray = []; } else if('ResetSpeed' == myData.FunctionName) { RivelPlayerState.SyschroAtionArray.push(myData); GameMode.SyncPositionXRange(Rivel,myData.CurrentPositionX); } else if('SetSpeedToZeroAndIdle' == myData.FunctionName) { RivelPlayerState.SyschroAtionArray.push(myData); }else if('FinishLineReduceSpeedPositionArray' == myData.FunctionName){ // console.log('rivel 减速'); RivelControl.ResetSpeed_noType(); // RivelPlayerState.FinishLineReduceSpeedPositionArray.push(myData.NodeX); } else if('PushPlayerToEnterStartLinePlayersArrayAndSetStartLinePositionX' == myData.FunctionName) { var EnterStartLinePlayersArray = GameStates.EnterStartLinePlayersArray; GameStates.StartLinePositionX = myData.StartLinePositionX; EnterStartLinePlayersArray.push(Rivel); } else if('UnScheduleFadeIn' == myData.FunctionName) { // cc.log('net UnScheduleFadeIn'); GameMode.unschedule(GameMode.Transport); HeroControl.javelinTag = false; RivelControl.javelinTag = false; HeroControl.CameraNode.parent = Hero; this.schedule(function() { GameStates.EnterStartLinePlayersArray=[]; }.bind(this), 5,0); // GameMode.PlayersStartToRun(HeroControl, RivelControl); } else if("SetEndLinePositionXAndStop" == myData.FunctionName) { var EndLinePositionX = myData.PositionX; RivelControl.SetSpeedToZeroAndIdle(); GameStates.EndLinePositionX = EndLinePositionX; } else if('Transport' == myData.FunctionName) { // cc.log('net Transport'); GameMode.schedule(GameMode.Transport, 3,0); } else if("FadeInAndOut" == myData.FunctionName) { // cc.log('net >3000 FadeInAndOut'); cc.find("Shade").getComponent('Shade').FadeInAndOut(function () { RivelControl.SetSpeedToZeroAndIdle(); Rivel.setPositionX(GameStates.StartLinePositionX); HeroControl.SetSpeedToZeroAndIdle(); Hero.setPositionX(GameStates.StartLinePositionX); HeroControl.javelinTag = false; RivelControl.javelinTag = false; HeroControl.CameraNode.parent = Hero; // GameMode.PlayersStartToRun(HeroControl, RivelControl); }.bind(this)) } else if('StopPlayerAllSchedule' == myData.FunctionName ) { HeroControl.StopPlayerAllSchedule(); RivelControl.StopPlayerAllSchedule(); } else if('PlayersStartToRun' == myData.FunctionName) { var Hero = cc.find('Hero'); var Rivel = cc.find('Rivel'); var PlayerStateScript = Hero.getComponent("PlayerState"); PlayerStateScript.TouchControlEnableTouch = false; HeroControl.HeroIsStop = false; RivelControl.HeroIsStop = false; HeroControl.ResetSpeed_noType(); RivelControl.ResetSpeed_noType(); } else if("HeroLongJumpHeroAnimation" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("HeroLongJumpRivelAnimation" == myData.FunctionName) { RivelPlayerState.SyschroAtionArray.push(myData); } else if ("SetCurrentSpeed_max_jumpLong" == myData.FunctionName) { RivelPlayerState.SyschroAtionArray.push(myData); } else if("HeroJumpHeroAnimation" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("PerfectHurdleBandRailing" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("PerfectHurdleBandBarrier" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("ShakeBarrier" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("upBike" == myData.FunctionName){ // cc.log("上车 准备网络"); RivelPlayerState.SyschroAtionArray.push(myData); } else if("downBikeHero" == myData.FunctionName){ // console.log(JSON.stringify(myData)); // console.log("Rivel.x ==",Rivel.x) Rivel.x = myData.EndPositionX+30; // console.log("Rivel.x ==",Rivel.x) RivelPlayerState.SyschroAtionArray.push(myData); HeroControl.downBikeRivel("Rivel"); } else if("upJavelinHeroAnimation" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("Herojavelin" == myData.FunctionName){ // console.log("Herojavelin",JSON.stringify(myData)); RivelPlayerState.SyschroAtionArray.push(myData); } else if("Restrictions" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("upJavelinend" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } //Code added by slam else if("JavelinData"==myData.FunctionName){ // console.log("JavelinData",JSON.stringify(myData)); // JavelinData RivelPlayerState.SyschroAtionArray.push(myData); } else if("SetCurrentSpeed_max" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("SetCurrentSpeed_noRestrictions" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } else if("SetCurrentSpeed_noRestrictions800" == myData.FunctionName){ RivelPlayerState.SyschroAtionArray.push(myData); } break; case qqNetwork.game2Room.leave: console.log("退出游戏",msgData); // 收到自己leave的协议,必须发送 gameResult 判断自己输,得分为0。 // 收到对手leave的协议,必须发送 gameResult 判断自己赢。 this.quitGame(msgData); break; case qqNetwork.game2Room.network: console.log("网络变化",msgData); // 收到自己leave的协议,必须发送 gameResult 判断自己输,得分为0。 // 收到对手leave的协议,必须发送 gameResult 判断自己赢。 break; } }, //帧同步控制器 frameDataControl : function (data) { console.log("帧同步",data); }, quitGame : function (data) { /* qqgame.pvpResponse({ eID: 'frameData', ePara: data }); */ // return; var Hero = cc.find("Hero"); var NetworkSocket = Hero.getComponent('NetworkSocket'); var myWin = 0; var myLose = 0; //自己退出了 //游戏结束了 自己输了 就是1 自己赢了 就是2 if (data.isSelf == 1) { myWin = qqgame.RESULT_LOSE; myLose = qqgame.RESULT_WIN; }else{ //别人退出了 myWin = qqgame.RESULT_WIN; myLose = qqgame.RESULT_LOSE; } var datas = { // "report":{"key":"value", ...},    ----大厅侧的上报账单中的字段及值 // "reportKey":"xxx", ----大厅侧上报后台为每个游戏分配的key" // // "result":{ // "win":-1/0/1,    ---- 输(-1)/平(0)/胜(1) // "myScore":"",  ---- 有分数才填写 // "competitorScore":"" ---- 有分数才填写 // myScore : 22, // competitorScore : 33, resultDisplay: { // 用于客户端结算面板的显示 result: myWin }, resultData: [ { qqgameid: this.netWorkData.playerInfos[0].qqgameid, record: { result: myWin, // 默认字段,必须有 playTime: 112,// 字段有大厅提供,游戏根据文档上报 amount: 1, // 字段有大厅提供,游戏根据文档上报, score : 20 } }, { qqgameid: this.netWorkData.playerInfos[1].qqgameid, record: { result: myLose, playTime: 60, amount: 1, score : 20 } } ] }; // for (var i = 0; i < datas.resultData.length; i++) { // // } console.log("退出游戏 上报数据",datas); NetworkSocket.sendSyncDataGameOver(datas); }, addLog: function(str) { // cc.log(str); }, sendGameData: function(str) { if (str.trim().length <= 0) { return } var data = {str:str}; // this.addLog("发送数据" + JSON.stringify(data)); network.send(qqNetwork.game2Room.gameData, data); }, sendSyncData: function(str) { if (str.trim().length <= 0) { return } var data = {str:str}; // this.addLog("发送数据" + JSON.stringify(data)); network.send(qqNetwork.game2Room.gameData, data); }, sendSyncDataGameOver: function(str) { // this.addLog("发送数据" + JSON.stringify(data)); network.send(qqNetwork.game2Room.gameResult, str); }, sendFrameData: function(str) { if (this.myFrame == null) { this.myFrame = 0; } if (str.trim().length <= 0) { return } this.myFrame++; var data = {str:str}; // this.addLog("发送数据" + JSON.stringify(data)); network.send(qqNetwork.game2Room.frameData, data); }, sendStep1Data:function() { network.send(qqNetwork.game2Room.gameInit, {}); // var randomSkin = cc.find("randomSkin"); // randomSkin.getComponent("upDateSkin").setSkinss(); this.addLog("等待对方初始化结束"); }, sendStep2Data:function() { network.send(qqNetwork.game2Room.gameReady, {}); this.addLog("数据同步完毕,等待对方同步完毕"); }, // 游戏结束 sendStep3Data:function() { network.send(qqNetwork.game2Room.gameResult, {}); this.addLog("游戏结束,上报游戏数据,等待对方回应"); }, GetSyncObj:function(ParentName,ObjName,PositionX) { var Level = cc.find("Level"); var aX = parseFloat(PositionX); var Obj = null; var LevelChildren = Level.children; // cc.log('Level'+length); for(var i=0;i