SpriteKit和SceneKit - 如何完全暂停游戏?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpriteKit和SceneKit - 如何完全暂停游戏?相关的知识,希望对你有一定的参考价值。

我成功地使用以下代码暂停场景游戏:

override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {

    var touch:UITouch = touches.anyObject() as UITouch 
    pauseText.text = "Continuer"
    pauseText.fontSize = 50
    pauseText.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2)

    /* bouton play/pause */

    var locationPause: CGPoint = touch.locationInNode(self)

    if self.nodeAtPoint(locationPause) == self.pause {
        println("pause")
        addChild(pauseText)
        pause.removeFromParent()
        paused = true
    }
    if self.nodeAtPoint(locationPause) == self.pauseText {
        pauseText.removeFromParent()
        paused = false
        addChild(pause)
    }
}

但我有一个问题。游戏的所有随机间隔创建对象并在屏幕上显示它们。当我暂停游戏时,它继续在后台创建对象,当我恢复游戏时,暂停期间创建的所有对象同时出现在屏幕上。

我该如何解决?

答案

在SKView暂停时,您无法将SKLabelNode(或其他任何内容)添加到场景中。您需要返回运行循环,以便在暂停游戏之前添加文本。这是一种方法:

// Add pause text or button to scene
addChild(pauseText)
let pauseAction = SKAction.run {
    self.view?.isPaused = true
}
self.run(pauseAction)

以上是关于SpriteKit和SceneKit - 如何完全暂停游戏?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 SceneKit 中的 SpriteKit 覆盖拉伸?

将scenekit和spritekit组合在一个屏幕中

SceneKit:在 SCNView 上渲染 SpriteKit 粒子系统时应用程序崩溃,当所有代码似乎都是系统代码的一部分时如何调试

从SceneKit中检测SpriteKit按钮按叠加

SpriteKit/Scenekit TouchesBegan 或 GestureRecognizer

将纯 Metal-API 与 SceneKit 或 SpriteKit 一起使用