在SpriteKit的编程指南中,update()函数被称为实现自己的游戏逻辑的最佳位置。 但是,当我意识到在一个节点上居中相机在didFinishUpdate()中工作得更好(避免延迟)时,我一直在使用该选项。
camera.position.y = node.position.y
害怕其他延迟问题我还实现了其余的游戏逻辑。有用。 因此,他们为什么推荐update()? 使用这两种方法是否有性能优势?
谢谢。
答案 0 :(得分:5)
没有性能优势,它确实是确定游戏逻辑前提条件的问题。您是否希望在假设物理和操作 WERE (didUpdate)计算或将(更新)计算的情况下运行逻辑。例如,在处理任何物理和动作之前调用update。因此,如果你有像自定义物理计算这样的逻辑,产生一个阻挡物理体的墙,或者甚至只是执行你想要立即运行的动作那么应该在更新方法中完成,因为所有这些情况都希望物理和动作将是在当前帧中计算。然而,在相机中居中节点在didUpdate中会很好,因为您想在物理计算之后使相机居中。
注意更新方法传递当前游戏时间也很重要,因此您需要使用更新方法来计算帧之间的时间(AKA增量时间)。这通常需要做一些事情,比如计数在N秒后执行逻辑或者用可变时间步骤处理自定义物理。这不会限制您使用更新方法,但是因为您应该将当前增量时间保存在变量中,以便可以从didUpdate方法和其他回调中访问它。
从个人经验来看,我发现自己使用的更新方法比didUpdate更多,因为我经常有很多自定义物理和逻辑,通常假设我所做的更改将在当前帧中进行处理。但正如我上面所说,这取决于你的前提条件。在某些情况下,由于逻辑可能与渲染周期无关,因此它无关紧要。
我认为Sprite Kit文档中的这个图像可以更容易地显示rending周期。分析您的游戏逻辑并确定您的游戏逻辑在哪个周期中有意义。