General purpose object pool module, provides a concise and complete interface for managing object pools for object generation and collection, as well as object pool manager.
npm install @ailhc/obj-pool@ailhc/obj-pool npm link
c. 在项目游戏项目目录下
npm link @ailhc/layer
3. 使用源码
a. clone 项目仓库
git clone https://github.com/AILHC/EasyGameFrameworkOpen
b. 直接复制packages/layer/src下的ts源码到项目文件夹下使用(排除index.ts)
1. 基础使用
``ts
//使用全局管理器
const mgr = new ObjPoolMgr();
//实现对象池接口
class ClassA implements objPool.IObj{
onGet(){
}
onReturn(){
}
onKill(){
}
}
mgr.createObjPool({sign:"test1",clas:ClassA});
const ins1 = mgr.get("test1");
//注入通用对象处理函数
//这样对于没有实现IObj接口的对象也可以
const objPool = new BaseObjPool();
objPool.init(
{
sign: "pool1",
objHandler: {
onGet(obj: objPool.IObj, onGetData: any) {
},
onCreate(obj): void {
},
onReturn(obj): void {
},
onKill(obj): void {
}
}
}
)
`
2. 提示更加智能
`ts
interface ITestObjGetDataMap {
TestObj1: { num: number },
TestObj2: { name: string },
TestObj3: { name: string }
}
const poolMgr = new ObjPoolMgr
poolMgr.createByClass("TestObj1", TestObj1);
poolMgr.createByFunc("TestObj2", () => {
return new TestObj2();
});
poolMgr.preCreate("TestObj1", 5);
//get 这里get可以获得对应"TestObj1"的传参类型提示
const testObj1: TestObj1 = poolMgr.get("TestObj1", { num: 2 });
//批量获取
const testObj2s: TestObj2[] = poolMgr.getMore("TestObj2", { name: "testObj2" }, 4);
`
3. 阈值控制
`ts
const objPool = new BaseObjPool();
objPool.init(
{
sign: "pool1",
objHandler: {
onGet(obj: objPool.IObj, onGetData: any) {
},
onCreate(obj): void {
},
onReturn(obj): void {
},
onKill(obj): void {
}
},
//阈值
threshold: 100
}
)
//回收对象,如果对象池里的数量大于等于100,则这个obj就会被kill掉(销毁);
objPool.return(obj);
``