如何在GameScene上保留指向SKView的指针

时间:2014-08-24 02:43:30

标签: pointers swift sprite-kit

我想在场景中保留一个指向我的GameViewController的指针,以便能够在场景之间进行转换。我来自C ++,这是一个我很难在swift中理解的话题。怎么办呢?

这就是我正在尝试的:

class SplashScene: SKScene
{
    var view = SKView()

    override func didMoveToView(view: SKView) {
        self.view = &view
        NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("transitionToGameScene"), userInfo: nil, repeats: false)
    }

    func transitionToGameScene() {
        let scene = GameScene()
        view.ignoresSiblingOrder = true
        view.presentScene(scene, transition: SKTransition.crossFadeWithDuration(1))
    }
}

1 个答案:

答案 0 :(得分:1)

SKScene已经有view属性,其中包含SKView,因此,对于您的问题的这一部分,只需使用已存在的属性:

class SplashScene: SKScene
{
    override func didMoveToView(view: SKView) {
        NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("transitionToGameScene"), userInfo: nil, repeats: false)
    }

    func transitionToGameScene() {
        let scene = GameScene()
        view.ignoresSiblingOrder = true
        view.presentScene(scene, transition: SKTransition.crossFadeWithDuration(1))
    }
}

至于你关于指针的问题:Swift并没有真正拥有它们,至少没有指向c ++存储位置的指针。您可以执行原始代码尝试执行的操作,但不要使用&运算符; Swift将在内部存储对象实例的引用(类似于c ++指针,但不是你可以直接搞乱的东西)。

虽然struct s vs class es,但您必须要小心。 Swift将存储对class个实例的引用,但是对于structs,它实际上会复制整个数据结构,而不是存储对它的引用。请参阅"Structures and Enumerations Are Value Types"中的"Classes Are Reference Types"Swift language reference

此外,在Swift中不时使用&运算符 。它的主要用途是In-Out Parameters。你可以用与c ++相同的方式来思考它。