好了,所以我在Swift中有一个Sprite Kit游戏,在游戏结束后我无法重新启动GameScene。

现在,当用户丧生时,将gameIsOver变量设置为true,它会暂停场景中的特定节点并启动计时器。在此计时器结束后,我转到我的“游戏结束”场景。在“游戏结束”场景中,用户可以返回家中或重新启动游戏。

这是我如何过渡到游戏的场景:

    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
        }

我在这里暂停我的场景是因为,如果不这样做,则当重新加载GameScene时,gameIsOver仍设置为true,并且我的应用程序崩溃了。考虑到我在此处将gameIsOver设置为false,我不知道为什么会发生这种情况。

从GameScene移至场景中的游戏并返回GameScene,或从GameScene移至我的主 View Controller 并返回GameScene几次后,我的fps降低了很多,以至于整个游戏都滞后于无法进行游戏的地步。

这使我相信,每次在现场展示我的游戏时,我都不会正确删除/处置GameScene。
我相信我和这里有同样的问题:In Swift on "game over" move from scene to another UIView and dispose the scene?,但是我对此并不陌生,我无法弄清楚他们是如何解决他们的问题的。

每当我显示我的Game Over场景时,如何才能完全重设/删除GameScene来停止游戏?

最佳答案

您的gameIsOver Bool在场景之间切换时不会保留任何值,除非您将其设为结构。所以代替

var gameIsOver = false

它应该是
struct game {
    static var IsOver : Bool = false
}

因此,当事情发生时您更改值时,您会调用
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

至于过渡回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)
    }

然后每当您想重置为GameScene时,只需调用
goToGameScene()

关于 swift ,spritekit : How to restart GameScene after game over?停滞了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33321071/

10-11 21:43