好了,所以我在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/