Files
fc/dev/project/assets/Scripts/zbridge/cmps/bridge.pool.manager.js
T

110 lines
2.2 KiB
JavaScript
Raw Normal View History

2026-05-23 22:10:14 +08:00
/******************************************************************
*
* 桥接对象池管理器
*
******************************************************************/
cc.Class( {
extends: cc.Component,
ctor: function() {
this.pools = {};
},
onLoad: function() {
nx.pools = this;
this.clean();
},
onDestroy: function() {
if( window.nx ){
nx.pools = null;
this.clean();
}
},
// 获取单池(通过Node节点)
getPool: function( _key, _node, _initCount = 10 ) {
// 存在返回
let pool = this.pools[_key];
if( pool ) {
return pool;
}
// 新建无模板
if( !_node ) {
nx.error( `[对象池]不存在${_key},获取失败!` );
return null;
}
// Prefab实例化
if( _node instanceof cc.Prefab ) {
_node = cc.instantiate( _node );
}
// 新建
pool = nx.factory.create( "bridge.pool", {
key: _key,
prefab: _node,
count: _initCount,
} );
this.pools[_key] = pool;
return pool;
},
// 对象回收
put: function( _node ) {
if( !_node ) {
return;
}
if( nx.dt.strEmpty( _node.poolKey ) ) {
nx.error( "回收失败,没有关联池信息!" );
_node.removeFromParent( true );
return;
}
// 池子不存在
let pool = this.pools[_node.poolKey];
if( !pool ) {
nx.warn( "[回收失败,没有关联池:", _node.poolKey );
_node.removeFromParent( true );
return;
}
// 回收
_node.position = cc.Vec2.ZERO;
pool.put( _node );
},
// 全子节点回收
putChildren: function( _node ) {
let chds = _node.children;
while( chds.length > 0 ) {
this.put( chds[0] );
}
_node.removeAllChildren( false );
},
// 清理
clean: function() {
for( let k in this.pools ) {
nx.factory.remove( this.pools[k] );
}
this.pools = {};
},
} );