Swift,spritekit:如何在游戏结束后重启GameScene?停止滞后?

sky*_*guy 5 sprite-kit swift xcode7 swift2

好吧,所以我在Swift中有一个sprite kit游戏,我在游戏结束后重启我的GameScene时遇到了麻烦.

现在,当用户失去一生时,一个变量gameIsOver被设置为true,它会暂停场景中的特定节点并启动计时器.在此计时器结束后,我移动到我的Game Over场景.从Game Over场景中,用户可以返回家中或重新开始游戏.

以下是我如何通过场景过渡到我的游戏:

    countdown(circle, steps: 120, duration: 5) { 

                //Performed when timer ends
                self.gameSoundTrack.stop()

                let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
                let vc = mainStoryboard.instantiateViewControllerWithIdentifier("GOViewController")
                self.viewController!.presentViewController(vc, animated: true, completion: nil)

                //Resetting GameScene
                self.removeAllChildren()
                self.removeAllActions()
                self.scene?.removeFromParent()
            self.paused = true
            gameIsOver = false
        }
Run Code Online (Sandbox Code Playgroud)

我在这里暂停我的场景是因为,如果我没有,当重新加载GameScene gameIsOver仍然设置为true我的应用程序崩溃.考虑到我gameIsOverfalse这里,我不知道为什么会这样.

从GameScene转到我的场景游戏并回到GameScene,或者从GameScene转移到我的家庭视图控制器并回到GameScene几次后,我的fps数量下降太多以至于整个游戏都落后于游戏玩法无法实现的程度.

这让我相信,每次我在场景中展示我的游戏时,我都没有正确地移除/处理GameScene.
我相信我遇到了同样的问题:在Swift上"游戏结束"从场景转移到另一个UIView并处理场景?,但我是新手,我无法弄清楚他们是如何解决他们的问题的.

我每次呈现Game Over场景时如何完全重置/删除GameScene以阻止滞后?

Tim*_*sen 5

你的gameIsOver Bool在场景之间切换时不会保留一个值,除非你把它变成一个结构.而不是

var gameIsOver = false
Run Code Online (Sandbox Code Playgroud)

它应该是

struct game {
    static var IsOver : Bool = false
}
Run Code Online (Sandbox Code Playgroud)

所以当你改变价值时,你会打电话

game.IsOver = true
//if your calling it in a different View controller or scene than where you created it just put the name before it like so
GameViewController.game.IsOver = true
Run Code Online (Sandbox Code Playgroud)

至于过渡回你的GameScene创建一个功能

func goToGameScene(){
    let gameScene:GameScene = GameScene(size: self.view!.bounds.size) // create your new scene
    let transition = SKTransition.fadeWithDuration(1.0) // create type of transition (you can check in documentation for more transtions)
    gameScene.scaleMode = SKSceneScaleMode.Fill
    self.view!.presentScene(gameScene, transition: transition)
    }
Run Code Online (Sandbox Code Playgroud)

然后每当你想重置为GameScene时,只需要打电话

goToGameScene()
Run Code Online (Sandbox Code Playgroud)

  • 不,它会创建一个新场景,并且不会保留旧场景。如果您使用导航控制器并使用 Segues,情况会有所不同。如果答案对您有帮助,请务必将其标记为正确。 (2认同)