PoolMgr.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import {
  2. _decorator,
  3. Prefab,
  4. Node,
  5. resources,
  6. NodePool,
  7. instantiate,
  8. error,
  9. sp,
  10. } from "cc";
  11. const { ccclass, property } = _decorator;
  12. export interface IPoolItem {
  13. key: string;
  14. prefabPath: string;
  15. }
  16. @ccclass
  17. export default class PoolMgr {
  18. pools: any = {};
  19. prefabs: any = {};
  20. pre_bullets: Prefab[] = [];
  21. private static _instance: PoolMgr = null;
  22. public static Instance(): PoolMgr {
  23. if (PoolMgr._instance == null) PoolMgr._instance = new PoolMgr();
  24. return PoolMgr._instance;
  25. }
  26. loadPrefabs(items: IPoolItem[]) {
  27. for (let i = 0; i < items.length; i++) {
  28. let item = items[i];
  29. resources.load(item.prefabPath, Prefab, (err, ret) => {
  30. if (err) {
  31. console.error(err);
  32. return;
  33. }
  34. this.initPool(item.key, ret, 11);
  35. });
  36. }
  37. }
  38. initPool(key: any, prefab: Prefab, count: number) {
  39. this.prefabs[key] = prefab;
  40. this.pools[key] = new NodePool();
  41. for (var i = 0; i < count; ++i) {
  42. this.pools[key].put(instantiate(prefab));
  43. }
  44. }
  45. get(key: any): Node {
  46. if (this.pools[key] == null) {
  47. error("没有" + key);
  48. return null;
  49. }
  50. if (this.pools[key].size() > 0) {
  51. var node = this.pools[key].get();
  52. var spine = node.getChildByName("spine");
  53. if (spine) {
  54. spine.getComponent(sp.Skeleton).paused = false;
  55. }
  56. return node;
  57. } else return instantiate(this.prefabs[key]);
  58. }
  59. put(key: any, node: Node) {
  60. this.pools[key].put(node);
  61. }
  62. }