当我的游戏进入后台模式时,我想完全暂停游戏。目前这就是我的工作:
在AppDelegate中:
func applicationWillResignActive(application: UIApplication) {
gameViewControllerDelegate?.pauseGame()
}
在我的游戏控制器中:
func pauseGame() {
buttonPausePressed(buttonPausePlay)
}
func buttonPausePressed(sender: UIButton!) {
scnView?.scene?.paused = true
stopMusic()
let exampleImage = UIImage(named: "16-play")?.imageWithRenderingMode(.AlwaysTemplate)
sender.setImage(exampleImage, forState: UIControlState.Normal)
}
调用该方法并更改按钮的图像。即使游戏暂停了。但是,当我再次打开应用程序并使用以下命令取消暂停时:
scnView?.scene?.paused = false
所有图形变化和其他奇怪的事情发生。似乎SCNActions从未被暂停过。有什么想法吗?
答案 0 :(得分:3)
我遇到了同样的问题。在你的AppDelegate.swift
中func applicationWillResignActive(application: UIApplication)
{
let viewControllers = self.window?.rootViewController?.childViewControllers
for vc in viewControllers!
{
if vc.isKindOfClass(GameViewController)
{
let view = vc as! GameViewController
view.comesFromBackground()
}
}
}
然后,在你的GameViewController中:
func comesFromBackground()
{
let skView: SKView = self.view as! SKView
let scene = skView.scene as! GameScene
scene.comesFromBackground = true
}
最后,在你的GameScene:
override func update(currentTime: CFTimeInterval)
{
if comesFromBackground{
comesFromBackground = false
gameViewController.pauseScene()
}
}
变量comesFromBackground是布尔值。 目的是当你再次打开应用程序时,在gameScene中设置布尔值,然后再次停止游戏。
我希望能帮到你