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

2024-01-03

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

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

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

In 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)
}

In 游戏场景.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 方法吗?

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


覆盖 SKScene 初始化

您可以覆盖初始化程序SKScene就像@Knight0fDragon 所描述的那样

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 <-----
    }
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“init”或“didmove”的正确方法是什么? 的相关文章

随机推荐