我应该在 init 方法中还是在 didMove(toView:) 中以编程方式设置 SKScene?
Posted
技术标签:
【中文标题】我应该在 init 方法中还是在 didMove(toView:) 中以编程方式设置 SKScene?【英文标题】:Should I set up a SKScene programmatically in the init method or in didMove(toView:)? 【发布时间】:2017-03-23 15:43:18 【问题描述】:我应该在 init 方法还是在 didMove(toView:) 中以编程方式设置 SKScene(即创建子节点、将子节点添加到当前场景、布局等)?
【问题讨论】:
Whats the correct way, using "init" or "didmove"?的可能重复 init 用于初始化。但在场景的初始化中,self.view 为 nil。如果您需要任何计算的视图,您应该使用 didMove(toView:) 【参考方案1】:是的,您的节点的初始化应该在“init”中进行。这是视图的初始设置发生的地方,这涉及创建SKNodes
并将此节点设置到它们的位置。如果您想将任何其他属性应用于节点,则可以在 sceneDidMove 中进行此一次性设置以查看。
例子
class GameScene : SKScene
var player : SKSpriteNode?
override init(size: CGSize)
let playerSize = CGSize(width: 30, height: 60)
self.player = SKSpriteNode((texture: nil, color: .cyan, size: playerSize)
self.addChild(player)
player.position.x = size.width / 2
player.position.y = size.height / 2
player.zPosition = 99
super.init(size: size)
// you can only call functions after super.init
override func sceneDidLoad()
//setup Code
【讨论】:
以上是关于我应该在 init 方法中还是在 didMove(toView:) 中以编程方式设置 SKScene?的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 sceneDidLoad v didMove(查看:)