场景取消暂停,转换到其他场景

时间:2017-05-20 03:21:03

标签: ios swift sprite-kit

我的场景成功暂停:

self.scene.isPaused = true

但是当它暂停时我会转换到其他场景:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let location = touches.first!.location(in: self)
        let node = self.atPoint(location)

        if node.name == "pause" {
            self.scene?.isPaused = true
            sceneManager.gameScene = self
            let transition = SKTransition.doorway(withDuration: 1.0)
            let pauseScene = PauseScene(size: self.size)
            pauseScene.scaleMode = .aspectFill
            self.scene!.view?.presentScene(pauseScene, transition: transition)
        }
    }

如果我注释掉 self.scene?.isPaused = true 下面的代码,我的场景确实暂停了,没有精灵移动或产生。这个暂停的场景我保存到场景管理器单身:

class SceneManager {
    static let shared = SceneManager()

    var gameScene: GameScene?
}

当我回来时,我检查场景管理器中的场景是否是我使用它的场景。但无论如何,当我回到暂停的场景时,我发现它根本没有停顿,所有的精灵都在移动。但是,我在其他屏幕上检测到没有碰撞的唯一区别。

那么当我在另一个屏幕上时,怎么能让它真正暂停?

谢谢!

编辑: 我发现在暂停场景的更新方法中暂停的场景(游戏场景)没有暂停。所以我接下来在更新方法中写道:

override func update(_ currentTime: TimeInterval) {
    if let gameScene = sceneManager.gameScene {
        if !gameScene.isPaused {
            sceneManager.gameScene?.isPaused = true
            print("CHANGED")
        }
    }
}

有趣的是的场景管理器?已经<。> 确实移动 仍然真正,但当我转向更新方法时,它变为< strong> false ,这就是我在update方法中编写此类代码的原因。 现在一切正常。

但是,如果将此类代码放入更新方法中这是一个好习惯吗?

0 个答案:

没有答案