Engine.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import BasicManager from "./Basic/BasicManager";
  2. import BasicObject from "./Basic/BasicObject";
  3. import EventManager from "./Event/EventManager";
  4. import { EventName } from "./Event/EventName";
  5. import AudioManager from "./Audio/AudioManager";
  6. import TimeManager from "./Time/TimeManager";
  7. import Tool from "./Tool/Tool";
  8. import ViewManager from "./View/ViewManager";
  9. import PoolManager from "./Pool/PoolManager";
  10. /**
  11. * 注意事项
  12. * 1、引擎层不因为游戏层的需求而更改,修改引擎层时要谨慎考虑
  13. * 2、禁止在声明成员变量时传值,声明Object中的属性除外,但仍要注意是否被覆盖
  14. * 3、所有缓动功能必须使用Tool.Tween.tweenTo(...),防止不可控
  15. * 4、所有计时器功能必须使用TimeManager.schedule(...),防止不可控
  16. * 5、接口前缀需要加 _I,枚举前缀需要加 _E,若与配置表数据对应,需要加后缀Config
  17. * 6、数据层、逻辑层与表现层分离
  18. * 7、所有类名需要加后缀,写明数据层、逻辑层、表现层;程序执行流程,数据层->逻辑层->表现层
  19. * 8、若函数响应事件,且参数大于1个,需要定义接口规范参数,...args类型参数除外
  20. */
  21. /**
  22. * 引擎类 - 逻辑层
  23. */
  24. export default class Engine extends BasicObject {
  25. public managers: Array<BasicManager>;
  26. constructor (custom: Function) {
  27. super();
  28. Tool.log("启动引擎");
  29. this.managers = new Array<BasicManager>();
  30. // 创建必要管理器
  31. EventManager.create();
  32. this.managers.push(new ViewManager());
  33. this.managers.push(new AudioManager());
  34. this.managers.push(new TimeManager());
  35. this.managers.push(new PoolManager());
  36. // 自定义进入游戏流程
  37. custom(this);
  38. Tool.log("启动完毕");
  39. Tool.log("");
  40. EventManager.onEvent(EventName.Game_QuitGame, this, () => {
  41. Tool.log("关闭引擎");
  42. for (let index in this.managers) {
  43. this.managers[index]._destroy();
  44. }
  45. this.managers = null;
  46. this._destroy();
  47. EventManager.destroy();
  48. cc.assetManager.releaseAll();
  49. Tool.log("退出游戏");
  50. });
  51. }
  52. }