2015-09-21 3 views
0

После того, как моя игра завершена, я бегу self.performSegueWithIdentifier("goToGameOver", sender: nil) в моем GameViewController, который держит мой GameScene черезRestartarting GameViewController/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, который не перезагружается и находится в том же состоянии, в котором он остался ... Как я могу «повторно инициализировать» или повторно представить GameScene через SKView ViewController?

Эта проблема возникает и в моем магазине, когда пользователь нажимает на боковую стрелку, которая перемещается «по-разному» в другой ViewController, и они покупают мою игровую валюту, но когда они нажимают на мою стрелу назад, и я запускаю self.dismissViewControllerAnimated(true, completion: nil) Элементы например мой UILabel, связанный с IBOutlet, не обновляет новую валюту в игре ... Если я не ошибаюсь, то это потому, что viewcontroller/scene не перезагружается. Как я могу исправить обе эти проблемы?

ответ

1

Вы можете сохранить состояние пользователя с помощью данных ядра или с помощью NSUserDefaults для облегченных данных. Когда инициализируется GameScene, GameScene может загрузить состояние из локального хранилища. Это также означало бы, что вам нужно будет написать в местный магазин, когда при освобождении GameScene. Кроме того, это также решило бы проблему с валютой. Просто обновите модель Core Data, когда пользователь добавит кредиты.

Альтернативой этому будет использование шаблона делегата. Определите , который GameScene соответствует GameOverViewController. GameScene не будет освобожден при представлении GameOverViewController, поскольку GameOverViewController будет ссылаться на GameScene. Поэтому этот экземпляр GameScene будет иметь ссылку, содержащуюся GameOverViewController (для добавления кредитов, обновлений меток и т. Д.). Например, образец делегата, проверьте мой ответ here

Я бы рекомендовал перейти к первому подходу, так как использование сохранения сохранит состояние пользователя между запусками.

+0

Большое спасибо @BenJammin, но, к сожалению, у меня нет такого большого знания о Core Data, можете ли вы дать мне какие-либо указания о том, как его использовать? Я часто использовал NSUserDefaults, но они не всегда обновляются вовремя ... –

+0

Основные данные - большая часть разработки iOS. Существует много движущихся частей и случаев использования; Таким образом, я бы порекомендовал несколько простых руководств по основным учебникам и инструментам Raywenderlich.com. Как только вы поймете структуру и модель управляемых объектов, вы сможете адаптировать структуру к вашим конкретным потребностям. Я не знаю, какие данные вам нужно сохранить. – BenJammin

+0

Я нашел отличный учебник на raywenderlich.com! Большое спасибо! –