ios - SpriteKit 中的 init() 与 didMove 与 sceneDidLoad

标签 ios sprite-kit

我了解到在SpriteKit中创建场景有3种方法,init()、didMove和sceneDidLoad。
但我无法理解将这三种方式分开。阅读其他问题我理解调用的顺序是 init -> SceneDidLoad -> didMove。

我怎样才能有效地使用它们?

最佳答案

你对调用这些函数的顺序是正确的。但是只有 init(size:) 才真正创建了一个场景。

init(size:)使用给定的 CGSize 作为边界初始化一个新的场景对象。在场景变得可见之前必须设置的任何东西都应该发生在这里。这一点很重要,因为新初始化的场景在通过 View 呈现之前对用户不可见。

sceneDidLoad()作为 init(size:) 的结果调用,可用于在呈现场景之前执行所需的任何更多设置。 init(size:) 可以从任何你想创建新场景的地方调用,但是 sceneDidLoad() 发生在场景本身。这对于您希望此类的所有场景都使用的任何设置都非常有用。

didMove(to:)是不同的,因为它与初始化无关。当场景由 View 呈现时调用此函数。基本上,当它对用户可见时。场景内部元素的 UI 调整和布局通常在此处处理。

关于ios - SpriteKit 中的 init() 与 didMove 与 sceneDidLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53647094/

相关文章:

ios - APPLE 登录 - 删除帐户

iphone - 从 UIViewController 绘制一条线

swift - 如何在 sprite kit 中复制一个 sprite 并让它们表现不同

ios - 如何创建一个已经形成粒子的 SKEmitterNode

ios - 我应该在 Swift 2 中创建 NSError 还是使用新的错误处理机制?

ios - 图像仅在 swift 3 中的 Whatsapp 上共享

ios - 如何从快速应用程序的键盘上完全删除隐藏/完成按钮?

sprite-kit - SpriteKit 中的粒子不会出现在 iPhone 模拟器上

swift - 如何添加 Admob 插页式广告

swift - 在圆形 CGPath Swift 上添加 Sprite