什么是正确的方式,使用“init”或“didmove”?

语言:Swift 3.0 — IDE:Xcode 8.0 beta 2 —项目:iOS游戏(SpriteKit)

我为iOS创build了一个游戏,而且我知道苹果对于接受应用程序/游戏的规则非常严格。 所以我想知道哪个是设置游戏的正确方法。

我从谷歌学习创build一个新的SpriteKit项目,并执行以下设置:

GameViewController.swift清除viewDidLoad()并添加所有这一切:

override func viewDidLoad() { super.viewDidLoad() let skView = self.view as! SKView let scene = GameScene(size: skView.bounds.size) scene.scaleMode = .aspectFit skView.presentScene(scene) } 

GameScene.swift中删除所有内容,并保留下面的代码:

 import SpriteKit class GameScene: SKScene { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override init(size: CGSize) { super.init(size: size) // add all the code of the game here... } } 

并在override init中开发我的游戏

但是我认为用init启动游戏实际上是错误的。 而正确的方法是使用didMove()方法。 所以这里的代码应该写在里面吗? :

 override func didMove(to view: SKView) { <#code#> } 

有谁知道哪一个是正确的方法? 为什么? 另外,如果我错了,我可以解释一下如何使用didMove方法吗?

不知道这是不是一个愚蠢的问题,只是困扰着我,使用初始化是错误的,并想问问,如果有人知道更多关于这一点。

覆盖SKScene初始化

您可以像覆盖@ Knight0fDragon所描述的那样覆盖SKScene的初始值SKScene

 class GameScene : SKScene { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setup() } override init() { super.init() setup() } override init(size: CGSize) { super.init(size: size) setup() } func setup() { // PUT YOUR CODE HERE } } 

或者你可以使用didMove(:)

 class GameScene: SKScene { override func didMove(to view: SKView) { super.didMove(to: view) // PUT YOUR CODE HERE <----- } } 

init仅在场景初始化时调用。 当场景呈现在视图中时,调用didMove