我如何回到SpriteKit中的旧场景?

时间:2014-07-11 18:22:41

标签: objective-c swift transition scene

如何在SpriteKit(在Swift中)转到旧场景?我在场景1中,我暂停了它,我移动到场景2,我想回到场景1,然后我恢复它。我不想再重新创建它。 感谢。

编辑:

所以,我试过这个: 在secondScene类中,我放置了一个oldScene SKScene属性和一个计算的setOldScene属性:

class SecondScene: SKScene {

var oldScene:SKScene?
var setOldScene:SKScene? {
                          get { return oldScene }
                          set { oldScene = newValue }
                         }

init(size: CGSize) {

    super.init(size: size)

    /* Setup my scene here */

}}

然后,在FirstScene课程中(我有一个移动球),在touchBegan方法中我有这个

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch: AnyObject in touches {

        let location = touch.locationInNode(self)

        if(self.view.scene.paused) {
            self.view.scene.paused = false
        }
        else {
            self.view.scene.paused = true
        }

        var secondScene = SecondScene(size: self.frame.size)
        secondScene.setOldScene = self.scene

        if !transition { self.view.presentScene(secondScene, transition: SKTransition.doorsOpenHorizontalWithDuration(2)) ; transition = true }



    }
}

但是,当我在SecondScene课程中调用self.view.presentScene(oldScene)时,我会移动你的第一堂课,我有两个移动的球: - ??

我不能使用类变量,Xcode还没有支持。

2 个答案:

答案 0 :(得分:1)

我通过在第二个场景上拥有一个公共属性解决了这个问题。 然后使用它来呈现第一个场景。

所以在第一个场景中,当你想要显示第二个场景....

if let scene = SKScene(fileNamed: "SecondScene") as! SecondScene?
{
    scene.parentScene = self
    self.view?.presentScene(scene)
}

以下代码位于SecondScene中。 准备返回第一个场景时,只需调用方法showPreviousScene()...

public var parentScene: SKScene? = nil

private func showPreviousScene()
{
    self.view?.presentScene(parentScene!)
}

答案 1 :(得分:0)

您必须保留对旧场景的引用,然后当您想要回到它时,只需致电

skView.presentScene(firstScene)

在您的SKView实例上。

有几种方法可以保持对班级的引用。您可以使用Singleton,或只使用class type property的类来存储引用,并从任何位置访问它。