【问题标题】:Restartarting GameViewController/GameScene重启 GameViewController/GameScene
【发布时间】:2015-09-21 00:47:16
【问题描述】:

一旦我的游戏完成,我将在我的 GameViewController 中运行 self.performSegueWithIdentifier("goToGameOver", sender: nil),它通过

保存我的 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 时,它会运行 self.dismissViewControllerAnimated(true, completion: nil)

但是它会回到我的 GameViewController/GameScene,它不会重新加载并且处于与它离开时相同的状态...我如何通过我的 ViewController 的 SKView “重新初始化”或重新呈现 GameScene?

这种问题也出现在我的商店中,当用户单击侧箭头时,它会“模态”移动到不同的 ViewController 并购买我的游戏货币,但是当他们单击我的后退箭头时,我会运行 self.dismissViewControllerAnimated(true, completion: nil) The诸如与 IBOutlet 链接的 UILabel 之类的元素没有更新新的游戏内货币数量……如果我没记错的话,那是因为视图控制器/场景没有重新加载。我将如何解决这两个问题?

【问题讨论】:

    标签: ios swift uiviewcontroller sprite-kit skscene


    【解决方案1】:

    您可以通过 Core Data 保存用户状态或使用 NSUserDefaults 保存轻量级数据。当GameScene 被初始化时,GameScene 可以从本地存储中加载状态。这也意味着在解除分配GameScene 时需要写入本地存储。此外,这也将解决游戏内货币问题。当用户添加信用时,只需更新您的核心数据模型。

    另一种方法是使用委托模式。在GameOverViewController 中定义GameScene 符合的protocol。在呈现GameOverViewController 时不会释放GameScene,因为GameOverViewController 将引用GameScene。因此,GameScene 的该实例将具有由GameOverViewController 持有的引用(以添加信用、更新标签等)。有关委托模式的示例,请查看我的答案here

    我建议使用第一种方法,因为使用持久性将在启动之间保存用户状态。

    【讨论】:

    • 非常感谢@BenJammin,但不幸的是我对 Core Data 了解不多,你能给我一些关于如何使用它的指示吗?我经常使用 NSUserDefaults,但它们并不总是及时更新......
    • 核心数据是iOS开发的很大一部分。有许多活动部件和用例;因此,我会推荐一些简单的 Raywenderlich.com 教程和苹果核心数据指南。一旦您了解了框架和托管对象模型,您就可以根据您的特定需求定制框架。我不知道你需要保存什么类型的数据。
    • 我在 raywenderlich.com 上找到了一个很棒的教程!非常感谢!
    • 使用SQLite,用这个框架很容易github.com/rondinellimorais/HelperLibrary
    • 在我的游戏中,当用户再次触摸按钮播放时,我只需清理所有节点并将所有 var 恢复为默认值,同时 GameScene 继续运行。 GameOverView、PauseView 或任何视图是情节提要“ContainerView”的元素,即显示/隐藏
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多