Сцены не освобождают

Я создаю игру SpriteKit, и у меня много проблем. Первый экран - меню, когда вы нажимаете кнопку воспроизведения, игрок попадает в саму игру, используя код:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch in touches {
        let location:CGPoint = touch.locationInNode(self)
        if self.nodeAtPoint(location).name == "play" {
            playButton.fontColor = colorPressed
            var scene = PlayScene(size: self.size)
            let skView = self.view! as SKView
            skView.ignoresSiblingOrder = true
            skView.showsFPS = false
            skView.showsNodeCount = false
            scene.scaleMode = .AspectFill
            gameStart(scene, skView: skView)
        }
    }
}

func gameStart(scene:SKScene, skView:SKView) {
    let scale = SKAction.scaleTo(0.0, duration: 0.17)
    about.runAction(scale, completion: {
        self.scene?.removeAllChildren()
        self.scene?.removeFromParent()
        skView.presentScene(scene)
    })
}

(PlayScene - сцена, где игрок играет в игру). Этот переход работает нормально. Игрок может нормально играть в игру. Затем, когда игрок проигрывает игру, я перехожу к игре поверх сцены, используя этот код:

func lineHitBadDot(dot: SKSpriteNode) {
    var sceneGG = OverScene(size: self.size)
    let skViewGG = self.view! as SKView
    skViewGG.ignoresSiblingOrder = true
    skViewGG.showsFPS = false
    skViewGG.showsNodeCount = false
    sceneGG.scaleMode = .AspectFill
    let scale = SKAction.scaleTo(0.0, duration: 0.17)
    scoreCounter.runAction(scale, completion: {
        self.scene?.removeAllChildren()
        self.scene?.removeFromParent()
        skViewGG.presentScene(sceneGG)
    })
}

(OverScene - это игра поверх сцены). Затем у игрока есть два варианта: повторить попытку или вернуться на сцену меню. Это использует этот код:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch in touches {
        let location:CGPoint = touch.locationInNode(self)
        if self.nodeAtPoint(location).name == "retry" {
            var sceneCookie = PlayScene(size: self.size)
            let skViewCookie = self.view! as SKView
            skViewCookie.ignoresSiblingOrder = true
            skViewCookie.showsFPS = false
            skViewCookie.showsNodeCount = false
            sceneCookie.scaleMode = .AspectFill
            gameStart(sceneCookie, skViewD: skViewCookie)
        }
        else if self.nodeAtPoint(location).name == "menu" {
            var sceneCookieB = GameScene(size: self.size)
            let skViewCookieB = self.view! as SKView
            skViewCookieB.ignoresSiblingOrder = true
            skViewCookieB.showsFPS = false
            skViewCookieB.showsNodeCount = false
            sceneCookieB.scaleMode = .AspectFill
            gameStart(sceneCookieB, skViewD: skViewCookieB)
        }
    }
}

func gameStartE(sceneD:SKScene, skViewD:SKView) {
    let scale = SKAction.moveToY(self.size.height + 300, duration: 0.17)
    homeB.runAction(scale, completion: {
        self.scene?.removeAllChildren()
        self.scene?.removeFromParent()
        skViewD.presentScene(sceneD)
    })
}

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

Благодарю.

0 ответов

Другие вопросы по тегам