重新启动 GameViewController/GameScene
Restartarting GameViewController/GameScene
我的游戏完成后,我 运行 宁 self.performSegueWithIdentifier("goToGameOver", sender: nil)
在我的游戏 ViewController 中,它通过
保存我的 GameScene
override func viewDidLoad()
{
super.viewDidLoad()
let scene = GameScene(size: view.bounds.size)
let skView = view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.ignoresSiblingOrder = true
scene.scaleMode = .ResizeFill
scene.size = skView.bounds.size
skView.presentScene(scene)
}
然后,在我的 GameOverViewController 当用户点击我的 playAgainButton 时 运行s self.dismissViewControllerAnimated(true, completion: nil)
但是然后它又回到了我的 GameViewController/GameScene,它没有重新加载并且处于与它离开时相同的状态...我怎样才能 "reinitialize" 或重新呈现 GameScene通过我的 ViewController 的 SKView?
这种问题也出现在我的商店中,当用户单击侧向箭头时,它会 "modally" 移动到另一个 ViewController 并且他们购买了我的游戏内货币,但是当他们单击我的后退时箭头和我 运行 self.dismissViewControllerAnimated(true, completion: nil)
我的 UILabel 等元素与 IBOutlet 链接,没有更新新的游戏内货币数量......如果我没记错的话,那是因为 viewcontroller/scene 没有重新加载。我该如何解决这两个问题?
您可以通过 Core Data 或使用 NSUserDefaults
保存用户状态以获得轻量级数据。当 GameScene
初始化时,GameScene
可以从本地存储加载状态。这也意味着您需要在解除分配 GameScene
时写入本地存储。此外,这也将解决游戏内货币问题。当用户添加了学分时,只需更新您的核心数据模型。
替代方法是使用委托模式。定义一个 protocol
,GameScene
符合 GameOverViewController
。 GameScene
在呈现 GameOverViewController
时不会被释放,因为 GameOverViewController
会引用 GameScene
。因此,GameScene
的实例将有一个由 GameOverViewController
持有的引用(以添加学分、更新标签等)。有关委托模式的示例,请查看我的回答
我建议使用第一种方法,因为使用持久性将在两次启动之间保存用户状态。
我的游戏完成后,我 运行 宁 self.performSegueWithIdentifier("goToGameOver", sender: nil)
在我的游戏 ViewController 中,它通过
override func viewDidLoad()
{
super.viewDidLoad()
let scene = GameScene(size: view.bounds.size)
let skView = view as! SKView
skView.showsFPS = false
skView.showsNodeCount = false
skView.ignoresSiblingOrder = true
scene.scaleMode = .ResizeFill
scene.size = skView.bounds.size
skView.presentScene(scene)
}
然后,在我的 GameOverViewController 当用户点击我的 playAgainButton 时 运行s self.dismissViewControllerAnimated(true, completion: nil)
但是然后它又回到了我的 GameViewController/GameScene,它没有重新加载并且处于与它离开时相同的状态...我怎样才能 "reinitialize" 或重新呈现 GameScene通过我的 ViewController 的 SKView?
这种问题也出现在我的商店中,当用户单击侧向箭头时,它会 "modally" 移动到另一个 ViewController 并且他们购买了我的游戏内货币,但是当他们单击我的后退时箭头和我 运行 self.dismissViewControllerAnimated(true, completion: nil)
我的 UILabel 等元素与 IBOutlet 链接,没有更新新的游戏内货币数量......如果我没记错的话,那是因为 viewcontroller/scene 没有重新加载。我该如何解决这两个问题?
您可以通过 Core Data 或使用 NSUserDefaults
保存用户状态以获得轻量级数据。当 GameScene
初始化时,GameScene
可以从本地存储加载状态。这也意味着您需要在解除分配 GameScene
时写入本地存储。此外,这也将解决游戏内货币问题。当用户添加了学分时,只需更新您的核心数据模型。
替代方法是使用委托模式。定义一个 protocol
,GameScene
符合 GameOverViewController
。 GameScene
在呈现 GameOverViewController
时不会被释放,因为 GameOverViewController
会引用 GameScene
。因此,GameScene
的实例将有一个由 GameOverViewController
持有的引用(以添加学分、更新标签等)。有关委托模式的示例,请查看我的回答
我建议使用第一种方法,因为使用持久性将在两次启动之间保存用户状态。