97 lines
2.3 KiB
TypeScript
97 lines
2.3 KiB
TypeScript
|
|
// Learn TypeScript:
|
|
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/typescript.html
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
|
|
// Learn Attribute:
|
|
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
|
|
// Learn life-cycle callbacks:
|
|
// - [Chinese] http://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
|
|
// - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html
|
|
|
|
const {ccclass, property} = cc._decorator;
|
|
|
|
@ccclass
|
|
export default class ResourcesPool extends cc.Component {
|
|
|
|
private static _instance: ResourcesPool;
|
|
|
|
|
|
private trash:{[key:string]:any[]}={};
|
|
|
|
public static get instance(): ResourcesPool {
|
|
if(this._instance == null)
|
|
{
|
|
this._instance = new ResourcesPool();
|
|
this._instance.init();
|
|
|
|
typeof(this);
|
|
|
|
}
|
|
return ResourcesPool._instance;
|
|
}
|
|
|
|
private init()
|
|
{
|
|
|
|
}
|
|
|
|
public put(recycle:Recycle,len:number = 100)
|
|
{
|
|
var key:string = recycle.getKey();
|
|
|
|
if(!this.trash[key])
|
|
{
|
|
this.trash[key] = [];
|
|
}
|
|
|
|
if(this.trash[key].length < len)
|
|
{
|
|
recycle.sleep();
|
|
this.trash[key].push(recycle);
|
|
|
|
}else
|
|
{
|
|
if(recycle instanceof cc.Component)
|
|
{
|
|
(<cc.Component>recycle).node.destroy();
|
|
}else if(recycle instanceof cc.Object)
|
|
{
|
|
(<cc.Object>recycle).destroy();
|
|
}else
|
|
{
|
|
}
|
|
//销毁
|
|
}
|
|
}
|
|
|
|
public get<T extends Recycle>(type:Function | string):T
|
|
{
|
|
var key;
|
|
|
|
if(typeof type === 'function')
|
|
{
|
|
//key = (<Function>type).name;
|
|
key = (<any>type).name;
|
|
}else
|
|
{
|
|
key = <string>type;
|
|
}
|
|
|
|
if(!this.trash[key] || this.trash[key].length == 0)
|
|
return null;
|
|
|
|
var obj:T = this.trash[key].shift();
|
|
obj.awake();
|
|
|
|
return obj;
|
|
}
|
|
}
|
|
|
|
export interface Recycle {
|
|
|
|
getKey():string;
|
|
awake();
|
|
sleep();
|
|
destroySelf();
|
|
} |