从零开发一个h5游戏:对象池管理器的设计
//所有对象池类均要实现此接口
export interface IPoolable {
init();//对象池取出初始化
reset();//对象池放回重置
}
//对象池管理器
export class PoolMgr extends BaseClass {
private _poolMap = {};//类名对数组 管理所有复用对象
//传入对象的类名
public getObject(className: string | any): any {
let key = 'pool_' + className;//为对象生成一个对象池key用以对应poolMap的key
let list = this._poolMap[key];
let obj: IPoolable = null;
if (!list || list.length == 0) {//查看对象池中是否还有对象,没有则新建一个并返回
obj = new (eval('game.' + className))();;
obj['poolName'] = key;
//return object;
}
else {
obj = list.pop();
}
obj.init();//初始化对象
return obj;
}
//对对象进行回收操作
public recycle(obj): void {
if (obj.parent) {//如果对象有父物体,则从父物体中移除
obj.parent.removeChild(obj);
}
obj.reset();//重置对象
let key = obj['poolName'];
if (!this._poolMap[key]) this._poolMap[key] = [];
this._poolMap[key].push(obj);
}
}
###下一章将会设计h5的事件派发及广播系统