Невозможно обновить переменную экземпляра игровой сцены при переходе из игры в сцену - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть что-то похожее на это.Где "grid" - это отдельный узел sksprite, который рисует текстуру, другие спрайты инициализируются и, наконец, инициализируется список соединений.

class GameScene: SKScene {


var gameOver: Bool = false
let  grid = Grid(blockSize: 15.0, rows:29, cols:28)
var direction: Int = IDLE
var totalSeconds:Int = 0

var balls: [(Int,Int)] = [(Int,Int)]()


let Car = SKSpriteNode(imageNamed: Car_IMAGE)
var Ghouls: [SKSpriteNode] = [SKSpriteNode]()


required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

...

}

Проблемау меня есть то, что, когда я перехожу к игре через сцену, вызванную обновлением о том, достигло ли количество шаров ноль (что, фактически, срабатывает), я вызываю функцию game over и устанавливаю флаг game overк истине как таковой:

override func update(_ currentTime: TimeInterval) {

    if self.gameOver == false {
        // Called before each frame is rendered
        print(Balls.count)
        // update balls count if sprite touches it
        self.checkForBalls()


        // check if ghouls touched car
        self.IfGameOver()

    }


}


 func IfGameOver() {
    if self.balls.count == 0 {
            goToScene(msg:"you lose")
            balls.removeAll(keepingCapacity: false)
            self.gameOver = true
    }
}



 func goToGameScene(msg: String){
    let gameOverScene = GameOverScene(size: size)
    gameOverScene.scaleMode = scaleMode

    let reveal = SKTransition.flipHorizontal(withDuration: 0.5)
    view?.presentScene(gameOverScene, transition: reveal)
}

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

Например, если я инициализировал массив следующим образом:

func intializeBalls() {
// where OArray is just series of coordinates
for o in OArray {
            balls.append(o.coordinate)
    } 
}

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

1 Ответ

0 голосов
/ 26 апреля 2018

Очень простое исправление, просто нужно удалить все на OArray (то есть OArray.removeall), и все хорошо в космосе - Извлеченный урок: не кодируйте, когда вы устали

...