AppUtils.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /**
  2. * 界面相关的工具
  3. */
  4. module.exports = {
  5. _sceneInitParams: undefined,
  6. _lastSceneName: undefined,
  7. getSceneCtrl () {
  8. return cc.director.getScene().getChildByName('ctrl').getComponent('SceneCtrlBase');
  9. },
  10. /**
  11. * 进入指定场景(显示load进度)
  12. *
  13. * @author Pyden
  14. * @date 2019-05-05
  15. * @param {String} sceneName 场景名称
  16. * @param {Any} paAlertCtrlrams 场景初始化的参数
  17. */
  18. loadScene (sceneName, params) {
  19. G.LogUtils.warn('loadScene', sceneName);
  20. this._sceneInitParams = params;
  21. G.AppUtils.getSceneCtrl().showLoadingAlert();
  22. let temp = undefined;
  23. cc.director.preloadScene(sceneName, (completedCount, totalCount, item)=>{
  24. temp = this.getLoadProgressInfo(temp, completedCount, totalCount);
  25. this.getSceneCtrl().updateLoadingProgress(temp.precent * 100, 100, item);
  26. }, (error, asset) => {
  27. if (error) {
  28. G.AppUtils.getSceneCtrl().addToast('网络异常!');
  29. } else {
  30. // 加载完毕
  31. cc.director.loadScene(sceneName);
  32. }
  33. });
  34. },
  35. /**
  36. * 进入指定场景(不显示load进度)
  37. *
  38. * @author libo
  39. * @date 2019-06-17
  40. * @param {String} sceneName 场景名称
  41. * @param {Any} params 场景初始化的参数
  42. */
  43. runScene (sceneName, params) {
  44. this._sceneInitParams = params;
  45. cc.director.loadScene(sceneName);
  46. },
  47. /**
  48. * 获取加载进度信息
  49. *
  50. * @author Pyden
  51. * @date 2019-08-27
  52. * @param {Map} tempInfo
  53. * @param {Integer} completedCount
  54. * @param {Integer} totalCount
  55. * @returns {Map}
  56. */
  57. getLoadProgressInfo (tempInfo, completedCount, totalCount) {
  58. if (!tempInfo) {
  59. tempInfo = {
  60. precent: 0,
  61. realPrecent: 0,
  62. completedCount: 0,
  63. totalCount: 0,
  64. lastPrecent: 0,
  65. lastCompletedCount: 0,
  66. tickTimes: 0
  67. };
  68. }
  69. tempInfo.tickTimes = tempInfo.tickTimes + 1;
  70. let tickPrecent = Math.min(tempInfo.tickTimes / 100, 0.4);
  71. if (totalCount == 0) {
  72. tempInfo.precent = tickPrecent;
  73. return tempInfo;
  74. }
  75. if (totalCount == completedCount) {
  76. tempInfo.precent = 1;
  77. return tempInfo;
  78. }
  79. if (totalCount > tempInfo.totalCount) {
  80. tempInfo.lastCompletedCount = tempInfo.completedCount;
  81. tempInfo.lastPrecent = tempInfo.realPrecent;
  82. }
  83. // tempInfo.lastPrecent变更后,每个文件累加的进度值
  84. let pie = (1 - tempInfo.lastPrecent) / (totalCount - tempInfo.lastCompletedCount);
  85. tempInfo.realPrecent = tempInfo.lastPrecent + (completedCount - tempInfo.lastCompletedCount) * pie;
  86. tempInfo.completedCount = completedCount;
  87. tempInfo.totalCount = totalCount;
  88. tempInfo.precent = Math.max(tempInfo.realPrecent, tickPrecent);
  89. return tempInfo;
  90. },
  91. /**
  92. * 获取场景初始化的参数
  93. *
  94. * @author Pyden
  95. * @date 2019-05-05
  96. * @returns {Any}
  97. */
  98. getSceneInitParams () {
  99. return this._sceneInitParams;
  100. },
  101. /**
  102. * 获取最后的场景名称
  103. *
  104. * @author Pyden
  105. * @date 2019-07-17
  106. * @returns {String}
  107. */
  108. getLastSceneName () {
  109. return this._lastSceneName;
  110. },
  111. /**
  112. * 获取最后的场景名称
  113. *
  114. * @author Pyden
  115. * @date 2019-07-17
  116. * @param {String} value
  117. */
  118. setLastSceneName (value) {
  119. this._lastSceneName = value;
  120. },
  121. /**
  122. * 将左下角为原点的坐标转化为中心点为原点的坐标
  123. *
  124. * @author libo
  125. * @date 2019-04-09
  126. * @param {cc.v2} pos
  127. * @returns
  128. */
  129. convertLeftHandToUiPos (pos) {
  130. return cc.v2(pos.x - (cc.view.getVisibleSize().width / 2), pos.y - (cc.view.getVisibleSize().height / 2));
  131. },
  132. /**
  133. * 暂停游戏
  134. *
  135. * @author libo
  136. * @date 2019-08-07
  137. */
  138. pauseGame () {
  139. cc.audioEngine.pauseAllEffects();
  140. cc.audioEngine.pauseMusic();
  141. // 暂停游戏停止心跳同步
  142. G.LoginMgr._stopKeepalive();
  143. cc.game.pause();
  144. },
  145. /**
  146. * 恢复游戏
  147. *
  148. * @author libo
  149. * @date 2019-08-07
  150. */
  151. resumeGame () {
  152. let effect = G.SettingMgr.getSettingStatusByType(JMC.LS_KEY.SETTING_SOUND);
  153. let music = G.SettingMgr.getSettingStatusByType(JMC.LS_KEY.SETTING_MUSIC);
  154. if (effect) {
  155. cc.audioEngine.resumeAllEffects();
  156. }
  157. if (music) {
  158. cc.audioEngine.resumeMusic();
  159. }
  160. cc.game.resume();
  161. G.AudioMgr.playMusic(G.AppUtils.getSceneCtrl().musicName, true);
  162. // 恢复游戏恢复心跳同步
  163. G.LoginMgr._startKeepalive();
  164. }
  165. };