GlobalManager.ts 1.8 KB

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