import { _decorator, Component, instantiate, Node, NodePool, Pool, Prefab } from 'cc'; import { resMgr } from '../../../Frames/ResourcesMgr'; const { ccclass, property } = _decorator; @ccclass('BulletPool') export class BulletPool extends Component{ private _bulletPrefab: Prefab = null; private _enemyBulletPrefab: Prefab = null; private _bulletPool: NodePool = new NodePool(); private _enemyBulletPool: NodePool = new NodePool(); init() { this._bulletPrefab = resMgr.getPrefab("Bullet"); this._enemyBulletPrefab = resMgr.getPrefab("BulletEnemy"); this._initPool(this._bulletPool, this._bulletPrefab, 10); this._initPool(this._enemyBulletPool, this._enemyBulletPrefab, 10); } private _initPool(pool: NodePool, prefab: Prefab, count: number) { for (let i = 0; i < count; i++) { const node = instantiate(prefab); pool.put(node); } } getBullet(isEnemy: boolean): Node { const pool = isEnemy ? this._enemyBulletPool : this._bulletPool; if(pool.size()>0){ return pool.get()!; }else{ //动态扩容 const prefab = isEnemy ? this._enemyBulletPrefab: this._bulletPrefab; return instantiate(prefab); } } recycle(bullet: Node, isEnemy: boolean) { const pool = isEnemy ? this._enemyBulletPool : this._bulletPool; if(!pool) return; pool.put(bullet); } }