我的场景成功暂停:
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方法中编写此类代码的原因。 现在一切正常。
但是,如果将此类代码放入更新方法中这是一个好习惯吗?