什么是正确的方法,使用" init"或" didmove"?

时间:2016-07-25 11:56:26

标签: ios objective-c swift sprite-kit swift3

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

我为iOS创建游戏,我知道Apple对接受应用程序/游戏的规则非常严格。所以我想知道哪种是正确的游戏设置方式。

我从谷歌学习创建一个新的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...
    }

}

并在覆盖初始化

中开发我的游戏

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

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

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

不知道这是一个愚蠢的问题,只是让我感到困惑,因为使用init是错误的,并且想问一下是否有人对此有更多了解。

1 个答案:

答案 0 :(得分:5)

覆盖SKScene init

您可以覆盖@ {Knight0fDragon所描述的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(to:)

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

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