Сег из SKScene и обратно заставляет игру "зависать" - PullRequest
0 голосов
/ 13 февраля 2019

Я разрабатываю игру SpriteKit с двумя разными сценами (MainMenu.sks и Settings.sks).У меня также есть UIViewController.

В главном меню пользователь может нажать «Настройки», после чего приложение загрузит сцену Settings.sks и представит ее.

Это делается с помощью этого кода:

// Move to Settings.sks
            let transition = SKTransition.flipVertical(withDuration: 1.0)
            let loadScene = SettingsScene(fileNamed: "SettingsScene")
            loadScene?.scaleMode = self.scaleMode
            self.view?.presentScene(loadScene!, transition: transition)

В сцене Settings.sks пользователь может нажать на SKLabelNode «Изменить имя пользователя», в результате чего приложение загрузит UIViewController, выполнив переход,

UIViewController содержит UITextField и UIButton.UIButton возвращает пользователя на MainMenu.sks.

Однако, когда я делаю это, создается впечатление, что новая сцена MainMenu накладывается на другую, вызывая зависание приложения и не реагируя на любые сенсорные жесты.Я могу видеть из nodeCount, что узлы удвоены.

Обходной путь - загрузка UIViewController непосредственно из MainMenu.sks (также через segue).При этом приложение работает просто отлично.

Я подозреваю, что проблема заключается в способе загрузки Settings.sks.

Чего мне не хватает?Может быть, выгрузить весь SKView перед выходом?

1 Ответ

0 голосов
/ 13 февраля 2019

Выполнение перехода представит новый вид сверху стека.Используя переход, чтобы вернуться в главное меню, приложение создаст новое главное меню поверх UIViewController.Я не могу сказать наверняка, почему ваше приложение зависает.Но я бы предположил, что есть некоторые свойства или функции, которые не работают должным образом, когда новое главное меню создается и представляется из вашего UIViewController.

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

Вам нужно написать IBAction в целевом представлении, главное меню в этом случае:

@IBAction func unwindToMainMenu(segue: UIStoryboardSegue) {
}

Затем Ctrl-переместить с вашей кнопки в UIViewController на значок выхода в раскадровке.Вы должны увидеть вариант использования IBAction unwindToMainMenu, который вы только что написали.Это создаст процесс раскрутки.

Полное руководство по раскрутке сегментов и несколько примеров можно найти в этом ответе: Для чего нужны сегменты раскрутки и как вы их используете?

...