NetworkSocket.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. const GameStatesStatic = require('GameStates');
  2. // var PlayerStateStatic = require('PlayerState');
  3. cc.Class({
  4. extends: cc.Component,
  5. properties: {
  6. NodeTouchScript: null,
  7. Rivel: null,
  8. javelin_prefab: {//标枪计距带起点
  9. default: null,
  10. type: cc.Prefab
  11. },
  12. isReported: false,//是否上报过分数?
  13. isRuning: false,
  14. isReadyGo: false,
  15. isGameStart: false,//如果没收到回调的gamestart
  16. TipToast: {//Toast 提示
  17. default: null,
  18. type: cc.Node
  19. },
  20. TipText: {//提示的文字
  21. default: null,
  22. type: cc.Label
  23. },
  24. _GameUI: null,
  25. _isChannelCreated: false,
  26. },
  27. onLoad: function () {
  28. qqNetwork.regMsgCallback(this.onMessage.bind(this));
  29. qqNetwork.enableDebug();
  30. this._isChannelCreated = false;
  31. this._GameUI = cc.find('UIControl').getComponent('GameUI');
  32. this.startGame();
  33. },
  34. startGame: function () {
  35. this.GameStates = cc.find("Canvas").getComponent("GameStates");
  36. this.GetGameMode = cc.find('Canvas').getComponent('GameMode');
  37. cc.game.setFrameRate(60);
  38. var TouchLayout = cc.find("TouchLayout");
  39. this.NodeTouchScript = TouchLayout.getComponent("NodeTouch");
  40. this.Rivel = cc.find("Rivel");
  41. },
  42. update() {
  43. if (qqNetwork.isHasChannelData && !this._isChannelCreated) {
  44. this._isChannelCreated = true;
  45. var msgData = qqNetwork.ChannelData;
  46. // console.log(msgData);
  47. // console.log("channelCreated ====", JSON.stringify(msgData.playerInfos[0]));
  48. // console.log("channelCreated ====", JSON.stringify(msgData.playerInfos[1]));
  49. this.onNetWorkChannel(msgData);
  50. }
  51. },
  52. onNetWorkChannel(msgData) {
  53. this.setNetWorkData(msgData);
  54. this.GameStates.bConnect = true;
  55. if (1 == msgData.playerInfos[0].seat) {
  56. this.GameStates.bServer = true;
  57. this.GameStates.isRobot = window.qqgame.isRobot;
  58. var randomSkin = cc.find("randomSkin");
  59. randomSkin.getComponent("upDateSkin").setRandomSkinss();
  60. if (!qqNetwork.debugFlag) {
  61. var data = { FunctionName: 'isrobot', status: "Server", isRobot: window.qqgame.isRobot };
  62. this.GetGameMode.SynchronizationFun(data);
  63. }
  64. }
  65. else {
  66. this.GameStates.bServer = false;
  67. cc.find('Rivel').getChildByName('Player').getChildByName('PlayerCollisionLine').destroy();
  68. this.GameStates.isRobot = window.qqgame.isRobot;
  69. if (!qqNetwork.debugFlag) {
  70. var data = { FunctionName: 'isrobot', status: "Client", isRobot: window.qqgame.isRobot };
  71. this.GetGameMode.SynchronizationFun(data);
  72. }
  73. }
  74. // GLog.addLog("是服务器吗=" + GameStates.bServer);
  75. if (this.GameStates.bServer) {
  76. var myDate = new Date();
  77. var name = myDate.getMilliseconds();
  78. this.GameStates.HostName = JSON.stringify('ID:' + name);
  79. cc.log('HostName:' + this.GameStates.HostName);
  80. var data = { FunctionName: 'HostName', OurName: this.GameStates.HostName };
  81. }
  82. this.scheduleOnce(function () {
  83. qqNetwork.send(qqNetwork.game2Room.gameReady, {});
  84. }, 0.5);
  85. },
  86. //开始游戏,播放开始动画
  87. onStartGame() {
  88. this.isGameStart = true;
  89. if (cc.find('Canvas').getComponent(cc.AudioSource) != null) {
  90. cc.find('Canvas').getComponent(cc.AudioSource).play();
  91. }
  92. // var GameStates = cc.find('Canvas').getComponent('GameStates');
  93. var ReadyGoPrefab = this._GameUI.CreateReadyGo();
  94. var readGo = ReadyGoPrefab.getComponent('readGo');
  95. readGo.active = true;
  96. var id = readGo.PlayAudio();
  97. cc.audioEngine.setFinishCallback(id, function () {
  98. this.startNetGame();
  99. var testDate = new Date();
  100. var mytime = testDate.getTime();
  101. this.GameStates.startTime = mytime;
  102. this.GameStates.bHasStartGame = true;
  103. cc.find('ReadyGoRoot').destroy();
  104. }.bind(this));
  105. },
  106. onMessage: function (msgName, msgData) {
  107. if (!msgData || !msgName) {
  108. return;
  109. }
  110. switch (msgName) {
  111. // case qqNetwork.room2Game.offline:
  112. // break;
  113. // case qqNetwork.room2Game.channelCreated: // 匹配成功
  114. // break;
  115. // case qqNetwork.room2Game.frameData:
  116. // // this.frameDataControl(msgData);
  117. // break;
  118. case qqNetwork.room2Game.gameStart:
  119. this.scheduleOnce(function () {
  120. this.onStartGame();
  121. }, 1);
  122. break;
  123. case qqNetwork.room2Game.gameData: // 消息同步
  124. var myData;
  125. if (msgData == "gameStart") {
  126. return;
  127. }
  128. myData = JSON.parse(msgData.str);
  129. var Hero = this.GameStates.getHero;// cc.find('Hero');
  130. var Rivel = this.GameStates.getRivel;//cc.find('Rivel');
  131. var HeroControl = this.GameStates.getHeroControl;// Hero.getComponent('HeroControl');
  132. var RivelControl = this.GameStates.getRivelControl;// Rivel.getComponent('HeroControl');
  133. var RivelPlayerState = Rivel.getComponent('PlayerState');
  134. var GameMode = this.GetGameMode // cc.find('Canvas').getComponent('GameMode');
  135. var GameStates = this.GameStates;// cc.find('Canvas').getComponent('GameStates');
  136. if ('HostName' == myData.FunctionName) {
  137. GameStates.HostName = myData.OurName;
  138. console.log('HostName:' + GameStates.HostName);
  139. }
  140. if ('ReadyToRun' == myData.FunctionName) {
  141. if (!this.GameStates.bReadyToRun) {
  142. this.GameStates.bReadyToRun = !this.GameStates.bReadyToRun;
  143. }
  144. else {
  145. this.StartToRun();
  146. }
  147. } else if ('StaggerAnimation' == myData.FunctionName) {
  148. RivelPlayerState.SyschroAtionArray.push(myData);
  149. GameMode.SyncPositionXRange(Rivel, myData.CurrentPositionX);
  150. }
  151. else if ('SynchroHeroPositionXAndSpeed' == myData.FunctionName) {
  152. RivelPlayerState.HeroPositionX = myData.PositionX;
  153. RivelPlayerState.HeroCurrentSpeed = myData.HeroCurrentSpeed;
  154. }
  155. else if ('myRandomSetSkins' === myData.FunctionName) {
  156. // var RivelPlayer = Rivel.getChildByName("Player");
  157. // RivelPlayer.active = true;
  158. // var HeroPlayer = Hero.getChildByName("Player");
  159. // HeroPlayer.active = true;
  160. Rivel.getChildByName("Player").getComponent("Charactor").setSkins(myData.arr[1]);
  161. Hero.getChildByName("Player").getComponent("Charactor").setSkins(myData.arr[0]);
  162. }
  163. else if ('SetCurrentSpeedAndAnimation' === myData.FunctionName) {
  164. // RivelControl.SetCurrentSpeedAndAnimation(myData.Speed);
  165. RivelPlayerState.SyschroAtionArray.push(myData);
  166. GameMode.SyncPositionXRange(Rivel, myData.CurrentPositionX);
  167. }
  168. else if ('SetCurrentSpeedAndAnimationSpeedDown' === myData.FunctionName) {
  169. if (RivelControl.PlayerStateScript.CurrentSpeed != 0) {
  170. // cc.log("当前速度是 通知",RivelControl.PlayerStateScript.CurrentSpeed);
  171. RivelControl.SetCurrentSpeedAndAnimation(myData.Speed);
  172. }
  173. } else if ('reqAddScore' == myData.FunctionName) {
  174. //console.log("请求计算分数");
  175. GameMode.SyncJaveEndAddScore();
  176. }
  177. else if ('addScore' == myData.FunctionName) {
  178. let deltaValue = 0;
  179. if (myData.deltaValue) {
  180. // console.log('myData.deltaValue ==', myData.deltaValue)
  181. deltaValue = myData.deltaValue;
  182. }
  183. GameMode.addScore(Rivel, myData.value, false, deltaValue);
  184. } else if ('callBackAddScore' == myData.FunctionName) {
  185. //服务器回调结果
  186. if (myData.value == 0) {
  187. GameMode.drawAddScrore(Hero);
  188. } else if (myData.value == 1) {//服务器的对应的玩家胜利
  189. GameMode.oldAddScore(Rivel);
  190. } else if (myData.value == -1) {//客户端对应的玩家胜利
  191. GameMode.oldAddScore(Hero);
  192. }
  193. }
  194. else if ('SendMyArrivedTime' == myData.FunctionName) {
  195. GameMode.RivalArrivedTime = myData.MyArrivedTime;//设置客户端的到达时间
  196. }
  197. else if ('PushPlayerToEnterFinishLinePlayersArray' == myData.FunctionName) {
  198. GameStates.EnterFinishLinePlayersArray.push(Rivel);
  199. }
  200. else if ('CheckPlayersDistance' == myData.FunctionName) {
  201. GameStates.EnterStartLinePlayersArray.push(Rivel);
  202. GameStates.StartLinePositionX = myData.StartLinePositionX;
  203. GameMode.CheckPlayersDistance(false);
  204. }
  205. else if ('SetStartLinePositionX' == myData.FunctionName) {
  206. GameStates.StartLinePositionX = myData.StartLinePositionX;
  207. //Code added by slam
  208. RivelControl.SetSpeedToZeroAndIdle();
  209. RivelControl.node.setPositionX(myData.StartLinePositionX);
  210. }
  211. else if ('ClearEnterFinishLinePlayersArray' == myData.FunctionName) {
  212. GameStates.EnterStartLinePlayersArray = [];
  213. }
  214. else if ('ResetSpeed' == myData.FunctionName) {
  215. RivelPlayerState.SyschroAtionArray.push(myData);
  216. GameMode.SyncPositionXRange(Rivel, myData.CurrentPositionX);
  217. }
  218. else if ('SetRivelPosition' == myData.FunctionName) {
  219. // console.log("跳远同步的位置!!", myData)
  220. Rivel.setPositionX(myData.positionX + 40);
  221. }
  222. else if ('SetSpeedToZeroAndIdle' == myData.FunctionName) {
  223. RivelPlayerState.SyschroAtionArray.push(myData);
  224. } else if ('FinishLineReduceSpeedPositionArray' == myData.FunctionName) {
  225. RivelPlayerState.SyschroAtionArray.push(myData);
  226. }
  227. else if ('PushPlayerToEnterStartLinePlayersArrayAndSetStartLinePositionX' == myData.FunctionName) {
  228. var EnterStartLinePlayersArray = GameStates.EnterStartLinePlayersArray;
  229. GameStates.StartLinePositionX = myData.StartLinePositionX;
  230. EnterStartLinePlayersArray.push(Rivel);
  231. }
  232. else if ('UnScheduleFadeIn' == myData.FunctionName) {
  233. GameMode.unschedule(GameMode.Transport);
  234. HeroControl.javelinTag = false;
  235. RivelControl.javelinTag = false;
  236. HeroControl.CameraNode.parent = Hero;
  237. this.schedule(function () {
  238. GameStates.EnterStartLinePlayersArray = [];
  239. }.bind(this), 5, 0);
  240. }
  241. else if ("SetEndLinePositionXAndStop" == myData.FunctionName) {
  242. var EndLinePositionX = myData.PositionX;
  243. RivelControl.SetSpeedToZeroAndIdle();
  244. GameStates.EndLinePositionX = EndLinePositionX;
  245. }
  246. else if ('Transport' == myData.FunctionName) {
  247. GameMode.schedule(GameMode.Transport, 3, 0);
  248. }
  249. else if ("FadeInAndOut" == myData.FunctionName) {
  250. cc.find("Shade").getComponent('Shade').FadeInAndOut(function () {
  251. RivelControl.SetSpeedToZeroAndIdle();
  252. Rivel.setPositionX(GameStates.StartLinePositionX);
  253. HeroControl.SetSpeedToZeroAndIdle();
  254. Hero.setPositionX(GameStates.StartLinePositionX);
  255. HeroControl.javelinTag = false;
  256. RivelControl.javelinTag = false;
  257. HeroControl.CameraNode.parent = Hero;
  258. }.bind(this))
  259. }
  260. else if ('StopPlayerAllSchedule' == myData.FunctionName) {
  261. RivelPlayerState.SyschroAtionArray.push(myData);
  262. }
  263. else if ('PlayersStartToRun' == myData.FunctionName) {
  264. RivelPlayerState.SyschroAtionArray.push(myData);
  265. }
  266. else if ("HeroLongJumpHeroAnimation" == myData.FunctionName) {
  267. RivelPlayerState.SyschroAtionArray.push(myData);
  268. }
  269. else if ("HeroLongJumpRivelAnimation" == myData.FunctionName) {
  270. RivelPlayerState.SyschroAtionArray.push(myData);
  271. }
  272. else
  273. if ("SetCurrentSpeed_max_jumpLong" == myData.FunctionName) {
  274. RivelPlayerState.SyschroAtionArray.push(myData);
  275. }
  276. else if ("HeroJumpHeroAnimation" == myData.FunctionName) {
  277. RivelPlayerState.SyschroAtionArray.push(myData);
  278. }
  279. else if ("PerfectHurdleBandRailing" == myData.FunctionName) {
  280. RivelPlayerState.SyschroAtionArray.push(myData);
  281. }
  282. else if ("PerfectHurdleBandBarrier" == myData.FunctionName) {
  283. RivelPlayerState.SyschroAtionArray.push(myData);
  284. }
  285. else if ("ShakeBarrier" == myData.FunctionName) {
  286. RivelPlayerState.SyschroAtionArray.push(myData);
  287. }
  288. else if ("upBike" == myData.FunctionName) {
  289. // cc.log("上车 准备网络");
  290. RivelPlayerState.SyschroAtionArray.push(myData);
  291. }
  292. else if ("downBikeHero" == myData.FunctionName) {
  293. Rivel.x = myData.EndPositionX + 30;
  294. RivelPlayerState.SyschroAtionArray.push(myData);
  295. let distance = Math.abs(Hero.x - Rivel.x);
  296. if (myData.isStop) {//另外一个玩家直接停止
  297. RivelControl.stopBikeHero("Rivel");
  298. } else {
  299. RivelControl.downBikeHero("Rivel");
  300. }
  301. //第一个hero到达终点通知
  302. if (myData.isCollision) {
  303. //console.log('distance ====', distance);
  304. if (distance < 70) {//距离大概一个车位
  305. HeroControl.downBikeHero("Hero");
  306. var data = { FunctionName: 'downBikeHero', EndPositionX: Hero.x, isCollision: false, isStop: false };
  307. GameMode.SynchronizationFun(data);
  308. } else {
  309. HeroControl.stopBikeHero("Hero");
  310. var data = { FunctionName: 'downBikeHero', EndPositionX: Hero.x, isCollision: false, isStop: true };
  311. GameMode.SynchronizationFun(data);
  312. }
  313. if (!GameMode.isUploaded) {
  314. //这里是传给服务器判断的值,比如当前玩家的奔跑时间
  315. let testDate = new Date();
  316. let dateTime = testDate.getTime();//获取当前时间(从1970.1.1开始的毫秒数)
  317. cc.log(dateTime, 'stopBikeHero 当前毫秒数');
  318. let inputValue = GameStates.uploadValue;
  319. let deltaValue = GameMode.bikeDeltaValue;//毫秒
  320. if (!GameStates.bServer) {
  321. var data = { FunctionName: 'addScore', PlayerName: 'Hero', value: inputValue, deltaValue: deltaValue };
  322. GameMode.SynchronizationFun(data);
  323. }
  324. else {
  325. GameMode.addScore(cc.find('Hero'), inputValue, true, deltaValue)
  326. }
  327. GameMode.isUploaded = true;
  328. }
  329. }
  330. }
  331. //通知存储值
  332. else if ("callFinishLine" == myData.FunctionName) {
  333. GameStates.uploadValue = Hero.x;
  334. }
  335. else if ("upJavelinHeroAnimation" == myData.FunctionName) {
  336. RivelPlayerState.SyschroAtionArray.push(myData);
  337. }
  338. else if ("Restrictions" == myData.FunctionName) {
  339. RivelPlayerState.SyschroAtionArray.push(myData);
  340. }
  341. else if ("upJavelinend" == myData.FunctionName) {
  342. RivelPlayerState.SyschroAtionArray.push(myData);
  343. }
  344. //Code added by slam
  345. else if ("JavelinData" == myData.FunctionName) {
  346. Rivel.setPositionX(myData.HeroPosition + 40);
  347. RivelPlayerState.SyschroAtionArray.push(myData);
  348. }
  349. else if ("SetCurrentSpeed_max" == myData.FunctionName) {
  350. RivelPlayerState.SyschroAtionArray.push(myData);
  351. }
  352. else if ("SetCurrentSpeed_noRestrictions" == myData.FunctionName) {
  353. RivelPlayerState.SyschroAtionArray.push(myData);
  354. }
  355. else if ("SetCurrentSpeed_noRestrictions800" == myData.FunctionName) {
  356. RivelPlayerState.SyschroAtionArray.push(myData);
  357. }
  358. else if ("resetHero" == myData.FunctionName) {
  359. RivelPlayerState.SyschroAtionArray.push(myData);
  360. }
  361. else if ("resetHerojavelin" == myData.FunctionName) {
  362. RivelPlayerState.SyschroAtionArray.push(myData);
  363. }
  364. else if ("endGame" == myData.FunctionName) {
  365. // console.log("让我们不动222",myData);
  366. RivelPlayerState.SyschroAtionArray.push(myData);
  367. }
  368. break;
  369. case qqNetwork.room2Game.leave:
  370. // GLog.addLog("on退出游戏=" + JSON.stringify(msgData));
  371. let netData1 = JSON.parse(JSON.stringify(msgData));
  372. //data.isSelf == 1表示自己离开,data.isSelf == 2表示对手离开。
  373. if (netData1.isSelf == 1) {
  374. this.endGame(2);
  375. var data = {
  376. // isSelf: netData1.isSelf
  377. isSelf: 3
  378. }
  379. this.quitGame(data);
  380. } else if (netData1.isSelf == 2) {
  381. this.endGame(1);
  382. var data = {
  383. // isSelf: netData1.isSelf
  384. isSelf: 4
  385. }
  386. this.quitGame(data);
  387. }
  388. break;
  389. case qqNetwork.room2Game.network:
  390. let netData2 = JSON.parse(JSON.stringify(msgData));
  391. if (this.isRuning && this.isReported)
  392. return;
  393. // GLog.addLog("on网络变化 提交数据=" + JSON.stringify(msgData));
  394. if (netData2.status == 'online') {
  395. if (netData2.isSelf == 1) {
  396. this.endGame(2, '对手网络不稳定');
  397. } else {
  398. this.endGame(1);
  399. }
  400. var data = {
  401. isSelf: netData2.isSelf
  402. }
  403. this.quitGame(data);
  404. }
  405. break;
  406. case qqNetwork.room2Game.playerEnter:
  407. if (this.isReadyGo && !this.isRuning) {
  408. this.startNetGame();
  409. }
  410. let netDataEnter = JSON.parse(JSON.stringify(msgData));
  411. if (this.isRuning) {
  412. // GLog.addLog(this.netWorkData.playerInfos[0].qqgameid + " ==" + JSON.stringify(msgData));
  413. if (this.netWorkData.playerInfos[0].qqgameid == netDataEnter.qqgameid) {
  414. //自己
  415. //GLog.addLog("自己 qqgameid ==" + this.netWorkData.playerInfos[0].qqgameid);
  416. this.endGame(2);
  417. this.setToast('网络不稳定');
  418. var data = {
  419. isSelf: 1
  420. }
  421. this.quitGame(data);
  422. }
  423. // else if (this.netWorkData.playerInfos[1].qqgameid == netDataEnter.qqgameid) {
  424. // //对手
  425. // GLog.addLog("对手 qqgameid ==" + this.netWorkData.playerInfos[1].qqgameid);
  426. // this.endGame(1);
  427. // var data = {
  428. // isSelf: 2
  429. // }
  430. // this.quitGame(data);
  431. // }
  432. }
  433. break;
  434. case qqNetwork.room2Game.gameReset:
  435. console.log("NetworkSocket 游戏重置", msgData);
  436. break;
  437. // 有一端退出游戏
  438. // case qqNetwork.room2Game.gameEnd:
  439. // return;
  440. // if (this.isReported)
  441. // return;
  442. // console.log("NetworkSocket gameEnd" + JSON.stringify(msgData));
  443. // //提前退出游戏,不管是谁退出接收到消息的话就自己赢
  444. // let tempData = {
  445. // isSelf: 2
  446. // }
  447. // this.endGame(1);
  448. // this.quitGame(tempData);
  449. // break;
  450. //语音变化
  451. //"isSelf": 1, // 1:自己,2:对手
  452. //"isOpen": 0, // 0:语音关闭,1:语音打开
  453. //"isTalking": 1 // 0:不在说话,1:正在说话
  454. case qqNetwork.room2Game.voice: // 麦克风
  455. // do something
  456. let netDataVoice = JSON.parse(JSON.stringify(msgData));
  457. this._GameUI.setPlayerVoice(netDataVoice.isSelf, netDataVoice.isOpen);
  458. break;
  459. }
  460. },
  461. //帧同步控制器
  462. frameDataControl: function (data) {
  463. console.log("帧同步", data);
  464. },
  465. quitGame: function (data) {
  466. // GLog.addLog("quit data ====" + JSON.stringify(data));
  467. if (this.isReported)
  468. return;
  469. this.isReported = true;
  470. console.log('quit data ====', data)
  471. /* qqgame.pvpResponse({
  472. eID: 'frameData',
  473. ePara: data
  474. }); */
  475. // return;
  476. // var Hero = cc.find("Hero");
  477. // var NetworkSocket = Hero.getComponent('NetworkSocket');
  478. var GameStates = cc.find('Canvas').getComponent('GameStates');
  479. // GameStates.playTime = Math.floor((GameStates.endTime - GameStates.startTime) / 1000);
  480. GameStates.dtTime = Math.round(GameStates.dtTime);
  481. var PlayerState = cc.find('Hero').getComponent("PlayerState");
  482. var RivelState = cc.find('Rivel').getComponent("PlayerState");
  483. cc.log(PlayerState.TerminalPoint + '=============' + RivelState.TerminalPoint);
  484. var myWin = 0;
  485. var myLose = 0;
  486. //自己退出了
  487. //游戏结束了 自己输了 就是1 自己赢了 就是2 ,0 就是平局
  488. if (data.isSelf == 1) {
  489. myWin = qqgame.RESULT_LOSE;
  490. myLose = qqgame.RESULT_WIN;
  491. } else if (data.isSelf == 0) {
  492. myWin = qqgame.RESULT_EQUAL;
  493. myLose = qqgame.RESULT_EQUAL;
  494. } else if (data.isSelf == 3) {
  495. myWin = qqgame.RESULT_ESCAPE;
  496. myLose = qqgame.RESULT_WIN;
  497. } else if (data.isSelf == 4) {
  498. myWin = qqgame.RESULT_WIN;
  499. myLose = qqgame.RESULT_ESCAPE;
  500. }
  501. else {
  502. //别人退出了
  503. myWin = qqgame.RESULT_WIN;
  504. myLose = qqgame.RESULT_LOSE;
  505. }
  506. var datas = {
  507. // "report":{"key":"value", ...},    ----大厅侧的上报账单中的字段及值
  508. // "reportKey":"xxx", ----大厅侧上报后台为每个游戏分配的key"
  509. //
  510. // "result":{
  511. // "win":-1/0/1,    ---- 输(-1)/平(0)/胜(1)
  512. // "myScore":"",  ---- 有分数才填写
  513. // "competitorScore":"" ---- 有分数才填写
  514. // myScore : 22,
  515. // competitorScore : 33,
  516. resultDisplay: { // 用于客户端结算面板的显示
  517. result: myWin
  518. },
  519. resultData: [
  520. {
  521. qqgameid: this.netWorkData.playerInfos[0].qqgameid,
  522. record: {
  523. result: myWin, // 默认字段,必须有
  524. playTime: GameStates.dtTime,// readygo开始 游戏开始======游戏结束 然后双方上报的时间要同步
  525. amount: PlayerState.TerminalPoint,
  526. // score: PlayerState.TerminalPoint,
  527. // score: 88
  528. }
  529. }, {
  530. qqgameid: this.netWorkData.playerInfos[1].qqgameid,
  531. record: {
  532. result: myLose,
  533. playTime: GameStates.dtTime,// readygo开始 游戏开始======游戏结束 然后双方上报的时间要同步
  534. amount: RivelState.TerminalPoint, // 字段有大厅提供,游戏根据文档上报,
  535. // score: RivelState.TerminalPoint,
  536. // score: 88
  537. }
  538. }
  539. ]
  540. };
  541. setTimeout(() => {
  542. console.log("退出游戏 上报数据", datas);
  543. //锚点
  544. this.sendSyncDataGameOver(datas);
  545. }, 1000);
  546. },
  547. sendSyncData: function (str) {
  548. // if (str.trim().length <= 0) {
  549. // return
  550. // }
  551. var data = { str: str };
  552. // this.addLog("发送数据" + JSON.stringify(data));
  553. qqNetwork.send(qqNetwork.game2Room.gameData, data);
  554. },
  555. sendSyncDataGameOver: function (str) {
  556. qqNetwork.send(qqNetwork.game2Room.gameResult, str);
  557. // GLog.addLog("gameResult ===="+JSON.stringify(str));
  558. },
  559. GetSyncObj: function (ParentName, ObjName, PositionX) {
  560. var Level = cc.find("Level");
  561. var aX = parseFloat(PositionX);
  562. var Obj = null;
  563. var LevelChildren = Level.children;
  564. // cc.log('Level'+length);
  565. for (var i = 0; i < LevelChildren.length; i++) {
  566. if (LevelChildren[i].name === ParentName) {
  567. var aObj = LevelChildren[i].getChildByName(ObjName);
  568. if (aObj && aX === aObj.convertToWorldSpaceAR(cc.Vec2.ZERO).x) {
  569. Obj = aObj;
  570. }
  571. }
  572. }
  573. return Obj;
  574. },
  575. /**
  576. * 设置网络数据
  577. * @param netWorkData
  578. */
  579. setNetWorkData: function (netWorkData) {
  580. // playerInfos
  581. // console.log(netWorkData.playerInfos);
  582. // console.log("channelCreated ====", netWorkData.playerInfos[0].headurl);
  583. // console.log("channelCreated ====", netWorkData.playerInfos[1].headurl);
  584. var UIControl = cc.find("UIControl").getComponent("UIControl");
  585. UIControl.setImage_Player1(netWorkData.playerInfos[0].headurl);
  586. UIControl.setImage_Player2(netWorkData.playerInfos[1].headurl);
  587. UIControl.setName_Player1(netWorkData.playerInfos[0].nick);
  588. UIControl.setName_Player2(netWorkData.playerInfos[1].nick);
  589. UIControl.setName_Gender1(netWorkData.playerInfos[0].gender);
  590. UIControl.setName_Gender2(netWorkData.playerInfos[1].gender);
  591. this.netWorkData = netWorkData;
  592. },
  593. //游戏最终结束
  594. endGame: function (num, isShowText) {
  595. var Hero = this.GameStates.getHero;// cc.find('Hero');
  596. var Rivel = this.GameStates.getRivel;//cc.find('Rivel');
  597. var HeroHeroControl = this.GameStates.getHeroControl;// Hero.getComponent('HeroControl');
  598. var RivelHeroControl = this.GameStates.getRivelControl;// Rivel.getComponent('HeroControl');
  599. if (cc.find('Canvas').getComponent('GameStates').strCureentLevel != "RideBike") {
  600. // if (num == 2) {
  601. HeroHeroControl.SetSpeedToZeroAndIdle();
  602. // }
  603. RivelHeroControl.SetSpeedToZeroAndIdle();
  604. }
  605. HeroHeroControl.HeroIsStop = true;//玩家停止
  606. RivelHeroControl.HeroIsStop = true;//玩家停止
  607. HeroHeroControl.SetCurrentSpeed(0);
  608. RivelHeroControl.SetCurrentSpeed(0);
  609. HeroHeroControl.javelinTag = false;
  610. RivelHeroControl.javelinTag = false;
  611. // if (num == 2) {
  612. Hero.getChildByName('Player').stopAllActions();
  613. // }
  614. Rivel.getChildByName('Player').stopAllActions();
  615. Hero.getChildByName('Player').setPositionY(-132);
  616. Rivel.getChildByName('Player').setPositionY(-37);
  617. // var GameMode = cc.find('Canvas').getComponent('GameMode');
  618. this.GetGameMode.isEndGame = true;
  619. var data = { FunctionName: 'endGame', num: num, showText: isShowText ? isShowText : null };
  620. this.GetGameMode.SynchronizationFun(data);
  621. var GameState = cc.find('Canvas').getComponent('GameStates');
  622. GameState.bHasEndGame = true;
  623. },
  624. //游戏最终结束
  625. endGameAll: function (num) {
  626. var Hero = this.GameStates.getHero;// cc.find('Hero');
  627. var Rivel = this.GameStates.getRivel;//cc.find('Rivel');
  628. var HeroHeroControl = this.GameStates.getHeroControl;// Hero.getComponent('HeroControl');
  629. var RivelHeroControl = this.GameStates.getRivelControl;// Rivel.getComponent('HeroControl');
  630. if (cc.find('Canvas').getComponent('GameStates').strCureentLevel != "RideBike") {
  631. // if (num == 2) {
  632. HeroHeroControl.SetSpeedToZeroAndIdle();
  633. // }
  634. RivelHeroControl.SetSpeedToZeroAndIdle();
  635. }
  636. HeroHeroControl.HeroIsStop = true;//玩家停止
  637. RivelHeroControl.HeroIsStop = true;//玩家停止
  638. HeroHeroControl.SetCurrentSpeed(0);
  639. RivelHeroControl.SetCurrentSpeed(0);
  640. HeroHeroControl.javelinTag = false;
  641. RivelHeroControl.javelinTag = false;
  642. // if (num == 2) {
  643. Hero.getChildByName('Player').stopAllActions();
  644. // }
  645. Rivel.getChildByName('Player').stopAllActions();
  646. Hero.getChildByName('Player').setPositionY(-132);
  647. Rivel.getChildByName('Player').setPositionY(-37);
  648. this.GetGameMode.isEndGame = true;
  649. },
  650. startNetGame: function () {
  651. if (this.GameStates.bReadyToRun) {
  652. this.StartToRun();
  653. }
  654. else {
  655. this.GameStates.bReadyToRun = !this.GameStates.bReadyToRun;
  656. }
  657. var NetworkSocket = this.GameStates.getHero.getComponent('NetworkSocket');
  658. var data = { FunctionName: 'ReadyToRun' };
  659. NetworkSocket.sendSyncData(JSON.stringify(data));
  660. this._GameUI.hideTimerTipOfNormalAcceleration(8);//普通加速带点击提示
  661. this.isReadyGo = true;
  662. },
  663. StartToRun: function () {
  664. this.GameStates.getHero.getChildByName("Player").getComponent("Charactor").setOnTouchListener(event);
  665. this.GameStates.getRivel.getChildByName("Player").getComponent("Charactor").setOnTouchListener(event);
  666. this.GameStates.getHeroControl.EnableHeroMoving(true);
  667. this.GameStates.getRivelControl.EnableHeroMoving(true);
  668. this.schedule(function () {
  669. this.GameStates.getHeroControl.InitialPositionY = this.GameStates.getHeroControl.node.getPositionY();
  670. this.GameStates.getRivelControl.InitialPositionY = this.GameStates.getRivelControl.node.getPositionY();
  671. }, 0.01, 0);
  672. this.isRuning = true;
  673. let index = 0;
  674. cc.game.on(cc.game.EVENT_HIDE, event => {
  675. if (this.isRuning && !this.isReported) {
  676. if (1 === ++index) {
  677. this.endGame(2, '对手网络不稳定');
  678. var data = {
  679. isSelf: 1
  680. }
  681. this.quitGame(data);
  682. }
  683. }
  684. });
  685. },
  686. readGoAudio: function (url, callBack) {
  687. cc.loader.loadRes(url, cc.AudioClip, function (err, clip) {
  688. var audioID = cc.audioEngine.play(clip, false, 1);
  689. if (callBack != null) {
  690. cc.audioEngine.setFinishCallback(audioID, callBack);
  691. }
  692. });
  693. },
  694. //设置游戏结束相应的提示
  695. setToast(showText) {
  696. this.TipToast.active = true;
  697. this.TipText.string = showText;
  698. setTimeout(function () {
  699. this.TipToast.active = false;
  700. this.TipText.string = '';
  701. }.bind(this), 1000)
  702. }
  703. });