В 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
използвате само perform with segue, старият 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 се появява. Как мога в този момент да пусна gameviewcontroller със сцена в него, която да бъде пресъздадена отново, когато се преместя на началния екран и стартирам играта отново? Малко съм изгубен къде и как да презапиша 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
Да... Мисля, че ще направя това, но как след това да се върна към началния екран vc, от който сцената на играта може да бъде стартирана отново иv сцената на играта overv може да бъде пусната? - person GeekSince1982; 24.05.2015
comment
За да се върнете към началния екран, просто представяте отново класа на началния екран на SKScene. Старата игра приключи сцена ще бъде пусната - person Wraithseeker; 24.05.2015
comment
Добре, разбрах. Ще променя кода си, за да използва SKScene за края на играта, който представя цялата информация за края на играта и след това превключва към началния екран, който след това, ако играта започне, се представя SKScene на играта вместо края на играта. Благодаря! Ще опитам това! - person GeekSince1982; 25.05.2015