首页 > 解决方案 > SpriteKit 中的 init() vs didMove vs sceneDidLoad

问题描述

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

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

标签: iossprite-kit

解决方案


您对调用这些函数的顺序是正确的。但init(size:)实际上只是创建了一个场景。

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

sceneDidLoad()被调用的结果是,init(size:)并且可用于在呈现场景之前进行所需的任何其他设置。init(size:)可以从您想要制作新场景的任何地方调用,但sceneDidLoad()发生在场景本身中。这对于您希望此类的所有场景都使用的任何设置都很有用。

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


推荐阅读