选择一个重复的物体并测量它
构建一个可重复的场景,在固定的持续时间内发射相同的射弹图案。在引入池之前,使用浏览器的分析工具观察帧率表现和分配活动。之后比较相同的场景,保持投射物数量和行为不变。如果测量的问题是昂贵的绘图、图像解码或碰撞工作,则对象重用将无法解决该原因。 MDN 解释说,JavaScript 会自动分配对象并使用垃圾收集,因此池是一种用于测试的设计选项,而不是强制优化。
对具有简单非活动状态的一类对象使用对象池。抛射物离开场地或撞到墙壁后可能会返回对象池中;一个具有不同阶段的长期存活的首领敌人不太适合。设置最大池大小或定义的溢出选择,以便突发无法无限制地无声地增长池。
完成激活和重置
激活时,根据新请求设置位置、速度、寿命、碰撞标志、所有者和视觉状态。停用时,将实体从活动碰撞和绘图列表中删除一次。保留旧不透明度的池化粒子可能会在错误的位置闪烁;保留其先前所有者的射弹可以将分数授予较早的来源。将重置逻辑保留在一个函数中并列出每个可变字段。
测试重用、耗尽和场景清理
多次触发、停用和重用同一个槽,然后检查所有属性是否与新初始化的示例匹配。故意耗尽池并验证所选策略:分配临时对象、删除装饰效果或以规则允许的方式限制游戏事件。进入和退出场景并确保旧一轮中的池化实体无法在新一轮中保持活动状态。
关于对象池浏览器游戏的常见问题
对象池总是能让 JavaScript 游戏更快吗?
不会。它增加了管理工作,并且只能帮助解决它实际影响的瓶颈。在前后测量可重复的场景,如果池化增加了复杂性而没有产生有用的结果,则保留更简单的分配路径。
最常见的池重置错误是什么?
重用的对象保留其早期生命中的字段,例如速度、生命周期、所有者或可见性。集中激活和重置,然后在测试中重复使用。
延伸阅读
发现信息过时了? 报告需要更正的内容