2

Контекст

Этот вопрос относится к Swift: SKSpriteKit, using Storyboards, UIViewController and UIButton to set in game parameters? и использует тот же M.W.E. (ссылка ниже).Swift: возврат в главное меню после выполнения условия в GameScene с помощью StoryBoards и UIViewControllers?

Взглянув на Main.storyboard мы видим следующее: enter image description here

Хотя это раскадровка позволило бы прогрессировать слева направо, нажав:

игры -> (легкий/жесткий) ->GameScene

UIViewController ->MyUIViewController ->GameViewController

и справа слева, нажав на UIButton на последних UIViewController с UILabel с указанием «Оценка», нет способа добраться от GameViewController до последних UIViewController с помощью «Оценка» UILabel.

Вопрос

Учитывая определенное событие, происходящее во время GameScene, как я могу передать некоторую информацию (например, счет) от GameScene и переход к последней последней UIViewController, так что пользователь может начать игру снова. В дополнение к удалению всего в GameViewController, чтобы не просто получить недостижимые старые экземпляры GameScene.

Для определенного условия позвольте этому постучать фиолетовым спрайтом в M.W.E. Для информации пусть это будет нечто тривиальное, как время до нажатия спрайта или даже просто случайное число.

Минимальный Рабочий пример

Stack Overflow SKSpriteKit

Примечание

Мой ответ here - и здесь реализована StackOverflow SKSpriteKit with Menu - показывает, что это вполне реально, но сместив все, чтобы SKView с, а не использовать storyboard. Поэтому, если возможно, пожалуйста, держите ответы, связанные с использованием этого гибрида. storyboard - SKView подход и как получить GameScene вызывают «счет» - UIViewController.

+0

Вы знакомы с шаблоном делегата? Это обычный способ представления дочерних представлений с родителем. Это [SO Post] (http://stackoverflow.com/questions/39561177/how-can-i-indicate-a-view-which-has-created-with-uikit-from-a-skscene/39564948#39564948) показывает основную идею и выполняет развязку. Протокол делегата может быть расширен, чтобы включить свойство оценки, поэтому сцена может уведомить об этом ViewController при изменении значения. –

+0

@MarkBrownsword Nope.Я не могу, вы могли бы объяснить это с помощью этого M.W.E .: https://github.com/SumNeuron/StackOverflow-SKSpriteKit-with-Menu – SumNeuron

ответ

1

Вы можете использовать свойство userData экземпляра вашей следующей сцены, чтобы сохранить текущую сцену, что-то вроде:

nextScene.userData = NSMutableDictionary() 
nextScene.userData?.setObject(actualScore, forKey: "actualScore" as NSCopying) 

и когда вы находитесь в следующей сцене, вы можете обратиться к этому NSMutableDictionary, который предыдущая сцена as:

if let actualScore = self.userData?.value(forKey: "actualScore") { 
    print("well done!, the score was: \(actualScore)") 
} 
Смежные вопросы