← 全部概念
游戏系统 / 19
对象池
一次分配,反复复用
交互演示
交互演示 · 移动指针或点击画面,观察变化
对象池预先创建一组固定数量的对象,之后反复使用,而不是每发射一颗子弹就创建一个新对象。在 C# 或 JavaScript 中,被丢弃的对象会成为垃圾,垃圾回收器清理它们时会暂停游戏。上方轨道会因这些暂停而卡顿,下方采用对象池的轨道则一直循环使用同样的 14 个槽位。
适用场景
对频繁生成和消失的对象使用对象池,例如子弹或特效。明确容量不足时的处理方式:拒绝生成、回收旧特效,或者在非时间敏感的执行阶段扩容。
实现示例
不依赖特定引擎的伪代码。请根据你使用的引擎调整函数和坐标约定。
bullet = pool.acquire()
if bullet:
bullet.reset(position, velocity, lifetime)
bullet.active = true
// 生命周期结束时:
pool.release(bullet)常见错误
重置所有保存状态的字段,包括计时器、目标、监听器和显示标记。对象池能减少频繁分配与回收,但活跃对象的更新和绘制仍然有开销。
内容原作 Nicolas Zullo · 中文整理与交互改编