每次交换缓冲区时,重用对象实例与创建新实例之间有什么区别和缺陷?
背景:
这是我的游戏引擎项目。
我正在写一个 TripleBuffer ,其中我有三个版本的每个对象:旧版本,当前版本和未来版本。将通过从当前版本读取状态并将更改应用于将来的版本来对这些对象进行更改。在对所有对象进行了更改后(如果适用),缓冲区将交换:将来的对象成为当前对象,当前对象成为旧对象,旧对象?< / p>
说明:的
使用案例:
假设有一些1000个对象以30Hz交换,这意味着它们需要每秒重建30次,要么克隆现有的对象,要么重用现在过时的旧对象(覆盖其所有状态)。
它们的复杂程度可以从大约5个属性到数百个属性,并且深度至少为2级。
(至少2个级别的深度 =缓冲的对象本身只包含构成它们的其他唯一对象的地图)
重新创建和重用要求迭代当前对象及其组件(短于:对象反过来构成< / em>的)。
进一步考虑:
在引擎的其他部分,将会有事件触发和其他魔法,它们可以使用对象的及时快照。因此,重新创建或重用的决定将导致:
答案 0 :(得分:1)
在图形中使用缓冲区,以便在尝试更新时不会逐个像素地“绘制”到屏幕。相反,您绘制到缓冲区,然后您可以一次交换整个图像。
我认为你使用缓冲区有类似的原因。当您处理它们时,您不希望使用新更新的对象修改“当前”对象,因为它会破坏当前对象的“图像”。
重用的好处:
重新创建的优势
您的最终决定将取决于性能与清晰度。重新创建所有对象有多贵?比较每个对象并仅构建所需的对象会更便宜吗?
即使比较对象或跟踪哪些内容发生变化更便宜,但为了更加简单起见,创建新内容的成本可能是值得的,这正是@DaphnaShezaf's answer所关注的。