Лучший способ реализовать подсчет жизней и очков в Sprite Kit (статический, IoC, другой?)

У меня есть опыт работы с Java, но я не программировал годами. В последнее время я снова заинтересовался, чтобы улучшить свои навыки программирования, и решил создавать обучающие приложения для своих детей на Swift. Я создал базовую игру Swift, используя набор Sprite Kit с игровым контроллером и несколькими сценами. Однако я столкнулся с основным вопросом, который связан с передачей основных данных, таких как очки и количество жизней, из сцен в gameviewcontroller.

Раньше я бы сделал это, создав статический элемент, который будет хранить оставшиеся жизни и подсчитывать очки, но как это происходит сегодня в Swift? Я понимаю, что IoC будет более современным эквивалентом статическим членам, но как насчет Swift и как насчет этого случая?

Существуют ли рамки IoC для предложений пользователей Swift или StackOverFlow по концепции решения?


person user3673836    schedule 19.10.2014    source источник
comment
Извините, если мой вопрос кажется глупым, но вы хотите сохранять данные при закрытии приложения (например, рекорды) или просто передавать данные между несколькими классами?   -  person Haox    schedule 19.10.2014
comment
Не глупый вопрос! Изначально я думал только о передаче данных между классами, но следующим шагом было бы сохранение рекордов. (Я просто еще не добрался до этого :) Спасибо!   -  person user3673836    schedule 19.10.2014
comment
Чтобы сохранить свой рекорд это очень просто. Вам просто нужно использовать набор default.setInteger() следующим образом: если вы оцениваете переменную с именем yourScore, поэтому вы кодируете ее для сохранения, если это рекорд: default.setInteger(yourScore, forKey: "highscore") не забывайте, что для того, чтобы быть глобальным, вы должны объявить его вне классов следующим образом: var defaults = NSUserDefaults() ; var highscore = defaults.integerForKey("highscore"). Благодаря этому вы можете называть свой рекорд везде, и ваш результат сохраняется в памяти устройства.   -  person Haox    schedule 19.10.2014
comment
Извините, что продолжаю спрашивать о глобальных переменных, но теперь мне интересно, как ввести глобальную функцию для обновления меток... поэтому у меня есть scoreCountLabel в GameViewController, и теперь благодаря вам я получу свои данные из глобальной переменной, но как это сделать? Я вызываю GameViewController.updateLabels() из GameScene, чтобы обновить счет на экране?   -  person user3673836    schedule 19.10.2014
comment
Сделайте еще один пост на этот вопрос, будет легче ответить со всеми настройками текста   -  person Haox    schedule 19.10.2014
comment
Хорошая точка зрения! Размещено здесь: stackoverflow.com/questions/26449343 / Спасибо!   -  person user3673836    schedule 19.10.2014


Ответы (2)


Чтобы передавать данные между несколькими классами, ваша переменная должна быть глобальной. Вы должны объявить свою переменную вне классов.

Например :

var score:Int = 0

class GameScene {
   //Your game here
}

Таким образом, вы будете вызывать score во всех других классах, таких как ваш GameViewController.

person Haox    schedule 19.10.2014

Я бы также использовал отдельный одноэлементный класс GameState для управления всеми этими вещами, просто чтобы убедиться, что нет конфликтов, и вы можете получить доступ к данным из любого места. Вот действительно хороший учебник для этого, и его должно быть легко обновить для Swift: http://www.raywenderlich.com/63235/how-to-save-your-game-data-tutorial-часть-1-из-2

person Cameron Frank    schedule 20.10.2014