GlobalManager.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const { ccclass, property } = cc._decorator;
  2. @ccclass('GlobalManager')
  3. export default class GlobalManager {
  4. private static instance: GlobalManager;
  5. private methodMap: Map<string, Function>;
  6. // 禁止外部 new 实例化
  7. private constructor() {
  8. this.methodMap = new Map();
  9. }
  10. // 获取单例实例
  11. public static getInstance(): GlobalManager {
  12. if (!GlobalManager.instance) {
  13. GlobalManager.instance = new GlobalManager();
  14. }
  15. return GlobalManager.instance;
  16. }
  17. // 注册全局方法
  18. public registerMethod(name: string, method: Function): void {
  19. if (typeof method !== 'function') {
  20. console.error(`zh:尝试注册的 ${name} 不是一个函数`);
  21. return;
  22. }
  23. if (this.methodMap.has(name)) {
  24. console.warn(`zh:方法 ${name} 已经存在,正在覆盖`);
  25. }
  26. this.methodMap.set(name, method);
  27. console.log(`zh:成功注册全局方法 ${name}`);
  28. }
  29. // 调用全局方法
  30. public callMethod(name: string, ...args: any[]): any {
  31. const method = this.methodMap.get(name);
  32. if (method) {
  33. console.log(`zh:调用全局方法 ${name}`);
  34. return method(...args);
  35. } else {
  36. console.error(`zh:全局方法 Method ${name} not found`);
  37. }
  38. }
  39. }
  40. //GlobalManager_1.default.instance.callMethod('env_playAdEnd');
  41. //GlobalManager_1.default.instance.registerMethod('env_playAdEnd', this.utilForAd);
  42. // // 注册方法
  43. // GlobalManager.getInstance().registerMethod('sayHello', (name: string) => {
  44. // console.log(`Hello, ${name}`);
  45. // });
  46. // // 调用方法
  47. // GlobalManager.getInstance().callMethod('sayHello', 'World');