SceneMgr.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { gameMgr } from "../Game/gameMgr";
  2. import setMap from "../Game/setMap";
  3. import GuideLayer, { guideLayer } from "../UI/GuideLayer";
  4. import { cocosz } from "./CocosZ";
  5. export default class SceneMgr {
  6. private static _inst: SceneMgr;
  7. public static get inst(): SceneMgr {
  8. if (!SceneMgr._inst) {
  9. SceneMgr._inst = new SceneMgr();
  10. }
  11. return SceneMgr._inst;
  12. }
  13. private _activeScene: string = "";
  14. private _timeInterval: number = 0;
  15. public loadScene(name: string, onLunch: Function) {
  16. if (this._activeScene == name) {
  17. let curTime: number = (new Date()).getTime();
  18. if (curTime - this._timeInterval < 1000) {
  19. return;
  20. }
  21. }
  22. this._timeInterval = new Date().getTime();
  23. // 加载场景开始前
  24. this.loadBefore(name, () => {
  25. // 加载场景
  26. cc.director.loadScene(name, () => {
  27. this._activeScene = name;
  28. onLunch();
  29. // 加载场景完成后
  30. this.loadFinish(name);
  31. });
  32. });
  33. }
  34. /** 加载场景开始前 */
  35. loadBefore(name: string, call: Function) {
  36. // 显示加载动画
  37. if (guideLayer && guideLayer.isValid) {
  38. if (name == "Home") {
  39. guideLayer.node.zIndex = cc.macro.MAX_ZINDEX;
  40. guideLayer.hideFjAni();
  41. guideLayer.showBgAni();
  42. } else if (name == "Game") {
  43. guideLayer.node.zIndex = cc.macro.MAX_ZINDEX;
  44. if ([5, 7].includes(cocosz.gameMode)) {
  45. // 夺旗模式
  46. guideLayer.hideFjAni();
  47. guideLayer.showBgAni();
  48. } else {
  49. guideLayer.hideBgAni();
  50. guideLayer.showFjAni();
  51. }
  52. }
  53. }
  54. // 跳转前释放
  55. if (name == "Home") {
  56. // 逐帧释放关卡节点
  57. if (gameMgr && gameMgr.map && gameMgr.map.isValid) {
  58. let mapTs = gameMgr.map.getComponent(setMap);
  59. if (mapTs) {
  60. setTimeout(() => { mapTs.release(call) }, 100);
  61. return;
  62. }
  63. }
  64. }
  65. call && call();
  66. }
  67. /** 加载场景完成后 */
  68. loadFinish(name: string) {
  69. if (name == "Home") {
  70. // 加载动画(zindex)
  71. if (guideLayer && guideLayer.isValid) {
  72. guideLayer.node.zIndex = cc.macro.MIN_ZINDEX;
  73. }
  74. // 释放资源
  75. // this.releaseRes();
  76. }
  77. else if (name == "Game") {
  78. guideLayer.node.zIndex = cc.macro.MIN_ZINDEX;
  79. }
  80. // 刷新背景音效
  81. cocosz.audioMgr.playBgm();
  82. }
  83. /** 释放游戏资源 */
  84. releaseRes() {
  85. // 释放游戏音效
  86. let audio_game: any = [];
  87. cocosz.getDirWithPath("audio_game", cc.AudioClip, audio_game);
  88. cocosz.resMgr.releaseResArray(audio_game, cc.AudioClip);
  89. if (6 == cocosz.gameMode) {
  90. // 释放地下城音效
  91. let audio_zombie: any = [];
  92. cocosz.getDirWithPath("audio_zombie", cc.AudioClip, audio_zombie);
  93. cocosz.resMgr.releaseResArray(audio_zombie, cc.AudioClip);
  94. // 释放僵尸预制体
  95. let prefab_zombie: any = [];
  96. cocosz.getDirWithPath("prefab_zombie", cc.Prefab, prefab_zombie);
  97. cocosz.resMgr.releaseResArray(prefab_zombie, cc.Prefab);
  98. // 释放技能预制体
  99. let prefab_zombie_skill: any = [];
  100. cocosz.getDirWithPath("prefab_zombie_skill", cc.Prefab, prefab_zombie_skill);
  101. cocosz.resMgr.releaseResArray(prefab_zombie_skill, cc.Prefab);
  102. // 释放技能图片
  103. let tex_zombie: any = [];
  104. cocosz.getDirWithPath("tex_zombie", cc.SpriteFrame, tex_zombie);
  105. cocosz.resMgr.releaseResArray(tex_zombie, cc.SpriteFrame);
  106. }
  107. }
  108. }