ios - 为什么游戏逻辑更喜欢 update() 而不是 didFinishUpdate?

标签 ios swift sprite-kit

在 SpriteKit 的编程指南中,update() 函数被称为实现您自己的游戏逻辑的最佳位置。 但是自从我意识到在 didFinishUpdate() 中将相机置于节点中心效果更好(避免延迟)后,我一直在使用该选项。

camera.position.y = node.position.y

由于担心其他延迟问题,我还实现了其余的游戏逻辑。有用。 因此,他们推荐 update() 的原因是什么? 使用这两种方法是否有性能优势?

谢谢。

最佳答案

没有性能优势,这实际上是确定游戏逻辑的先决条件的问题。你想运行你的逻辑假设物理和行动(didUpdate)计算或(更新)计算。例如,在处理任何物理和 Action 之前调用更新。所以如果你有像自定义物理计算这样的逻辑,生成一堵墙来阻挡物理体,或者甚至只是执行一个你想立即运行的 Action ,那么应该在更新方法中完成,因为所有这些情况都期望物理和 Action 将是在当前帧中计算。然而,在 didUpdate 中将节点置于摄像机的中心会很好,因为您希望在计算物理后将摄像机置于中心。

同样重要的是要注意更新方法会传递当前游戏时间,因此您需要使用更新方法来计算帧之间的时间(也称为增量时间)。这通常是必要的,例如在 N 秒后计算以执行逻辑或处理具有可变时间步长的自定义物理。但是,这不会限制您使用更新方法,因为您应该将当前增量时间保存在一个变量中,以便您可以从 didUpdate 方法和其他回调中访问它。

根据个人经验,我发现自己更多地使用更新方法而不是 didUpdate,因为我经常有很多自定义物理和逻辑,它们通常假设我所做的更改将在当前帧中全部处理。但正如我上面所说,这取决于你的先决条件是什么。在某些情况下,您选择什么并不重要,因为逻辑可能独立于渲染周期。

我认为 Sprite Kit 文档中的这张图片可以更轻松地可视化渲染周期。分析您的游戏逻辑并确定您的游戏逻辑在循环中的哪个点是有意义的。 enter image description here

关于ios - 为什么游戏逻辑更喜欢 update() 而不是 didFinishUpdate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33810864/

相关文章:

android - 使用捏合、缩放和滚动(平移)在移动设备上强制使用桌面 CSS

ios - 在 iOS 12 上从 FCM 接收远程推送通知时播放自定义声音

ios - 将 NSArray 中的 TableView 项目分组到 Swift 中的 JSON 响应中返回

swift - 无法使用类型 'Int' 的参数列表调用类型 '(Number)' 的初始值设定项

ios - 如何计算 SWIFT 中分接位置的脉冲方向?

ios - Amazon S3 Cognito 同步

ios - 删除单元格导致崩溃

ios - Xcode,目标类模板缺少SKScene的子类

swift - 如何让 xcode 在 GameScene.swift 而不是 GameScene.sks 中运行代码

ios - 隐藏导航栏而不移动scrollView