|
@@ -0,0 +1,43 @@
|
|
|
+import { _decorator, Component, Node, Prefab } from 'cc';
|
|
|
+import { GameObjectPool } from './GameObjectPool';
|
|
|
+
|
|
|
+export class PoolManager {
|
|
|
+ private static _instance: PoolManager;
|
|
|
+ private _pools: Map<string, GameObjectPool> = new Map();
|
|
|
+
|
|
|
+ public static get instance(){
|
|
|
+ if(!this._instance){
|
|
|
+ this._instance = new PoolManager();
|
|
|
+ }
|
|
|
+ return this._instance;
|
|
|
+ }
|
|
|
+
|
|
|
+ public registerPool(prefab: Prefab, initialSize: number = 10){
|
|
|
+ const key = prefab.name;
|
|
|
+ if(!this._pools.has(key)){
|
|
|
+ this._pools.set(key, new GameObjectPool(prefab, initialSize));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取节点实例
|
|
|
+ public get(prefab: Prefab): Node{
|
|
|
+ const key = prefab.name;
|
|
|
+ if(!this._pools.has(key)){
|
|
|
+ this.registerPool(prefab);
|
|
|
+ }
|
|
|
+ return this._pools.get(key)!.get();
|
|
|
+ }
|
|
|
+
|
|
|
+ //回收节点
|
|
|
+ public put(node: Node){
|
|
|
+ const key = node.name;
|
|
|
+ if(this._pools.has(key)){
|
|
|
+ this._pools.get(key)!.put(node);
|
|
|
+ } else {
|
|
|
+ Error("PoolManager destroy")
|
|
|
+ node.destroy();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|