В Swift при завершении игры перейти со сцены на другой UIView и удалить сцену?

У меня есть «счетчик жизней» в моей игре, и когда он достигает 0 = мертвый — я хочу перейти от сцены к другому UIView — который является просмотром игры — со статистикой и кнопкой, чтобы вернуться на главный экран (сначала UIViewController с кнопками для запуска игры и так далее.

Вот код того, как я перехожу к представлению Game Over

class GameScene: SKScene,SKPhysicsContactDelegate {
var viewController: UIViewController?
// more code and functions
// ......

 func trackLife (lifeCHange: Int){
    life = life + lifeCHange
    lifeLabel.text = String(life)
    if life < 1 {
        // Go to Game Over VC
        self.removeAllChildren()
        self.removeAllActions()
        self.scene?.removeFromParent()
        self.viewController!.performSegueWithIdentifier("gameOverSegue", sender: viewController)

    }
  }
}

это работает для представления игры поверх просмотра, но я думаю, что я не «удаляю» или не сбрасываю сцену. потому что если я сделаю это в цикле:

Начать игру --> Игра окончена --> Вернуться на главный экран --> Начать игру --> Игра окончена....

Я вижу, что использование памяти растет с каждым циклом :) Я думаю, я просто добавляю сцены, а не удаляю их?

Извините - я новичок в этом. Будем очень признательны за ваш опыт! :)


person GeekSince1982    schedule 24.05.2015    source источник
comment
вы используете только выполнение с переходом, старый viewController не будет выпущен. Вам нужно вернуться или сбросить window.rootViewController, чтобы прервать цикл сохранения.   -  person SolaWing    schedule 24.05.2015
comment
@SolaWing вернись назад - ты имеешь в виду вернуться туда, куда? контроллеру представления, который загружает сцену? и если я хочу сбросить - как это сделать правильно?   -  person GeekSince1982    schedule 24.05.2015
comment
Да. вы можете вернуться через dismissViewControllerAnimated или popViewControllerAnimated, в зависимости от того, используете ли вы NavigationController. Если вы хотите выполнить сброс, в зависимости от того, какое свойство содержит исходный домашний ViewController (window.rootViewController, если это ваш первоначальный viewController, или свойство viewControllers NavigationController), вы можете просто перезаписать его новым домашним ViewController.   -  person SolaWing    schedule 24.05.2015
comment
@SolaWing Я думаю, что делаю что-то не так. Поэтому я предпочитаю сбросить все это. В соответствии с кодом выше - я выполняю переход - поэтому появляется Game Over VC. Как я могу в этот момент сбросить игровой контроллер со сценой в нем, чтобы он снова был воссоздан, когда я перехожу на главный экран и снова запускаю игру? Я немного запутался, где и как перезаписать rootvc... Извините :(   -  person GeekSince1982    schedule 24.05.2015
comment
Почему вы переходите на новый контроллер представления? Почему бы просто не представить новый scene, используя метод presentScene на SKView. Взгляните на это   -  person ABakerSmith    schedule 24.05.2015
comment
вы можете получить окно от делегата приложения. или keyWindow свойство sharedApplication. Решение @ABakerSmith может быть лучше. так как я не знаком со SpriteKit.   -  person SolaWing    schedule 24.05.2015


Ответы (1)


Чтобы эффективно управлять памятью в Sprite-Kit, вам следует создать еще один SKScene для экрана GameOver, который будет отображаться на главном экране. Таким образом, старая SKScene будет выпущена.

person Wraithseeker    schedule 24.05.2015
comment
Да... Думаю, я так и сделаю, но как потом вернуться на главный экран, с которого можно снова запустить игровую сцену и выйти из сцены окончания игры? - person GeekSince1982; 24.05.2015
comment
Чтобы вернуться на главный экран, вы просто снова представляете класс главного экрана SKScene. Старая сцена игры будет выпущена - person Wraithseeker; 24.05.2015
comment
Хорошо понял. Я изменю свой код, чтобы использовать игру поверх SKScene, которая представляет всю информацию об игре поверх, а затем переключается на главный экран, который затем, если игра началась, SKScene представляет игру вместо игры. Спасибо! Попробую это! - person GeekSince1982; 25.05.2015