什么是正确的方法,使用“init”或“didmove”? [英] Whats the correct way, using "init" or "didmove"?

查看:533
本文介绍了什么是正确的方法,使用“init”或“didmove”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Language: Swift 3.0 --- IDE : Xcode 8.0 beta 2 --- Project : iOS Game (SpriteKit)

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

I create a game for iOS and i know Apple is really strict with their rules to accept the app/game. So i want to know which is the correct way to setup a game.

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

I learned from google to create a new SpriteKit Project and do the following setup :

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

In GameViewController.swift clear viewDidLoad() and add all this :

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 中删除所有内容并保留此代码:

In GameScene.swift delete everything and leave this code :

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()方法。那么代码应该写在这里吗? :

But I think thats actually wrong to start the game with init. And that the right way is to use the didMove() method. So should the code be written inside here? :

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

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

Does anyone know which one is the correct way? And why? Also if its wrong the way i do it, can you explain me how to use didMove method?

不知道这是一个愚蠢的问题,只是困扰我使用init是错误的,想询问是否有人知道更多。

Don't know if this is a silly question just bothered me that using init is wrong and wanted to ask if someone knows more about this.

推荐答案

覆盖SKScene init



您可以覆盖 SKScene 的初始值设定项,如@ Knight0fDragon描述

Overriding the SKScene init

You can override the initializers of SKScene like described by @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:)



Or you can use the didMove(to:)

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

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

The init is called only when the scene is initialised. The didMove is called when the scene is presented into the view.

这篇关于什么是正确的方法,使用“init”或“didmove”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆