У меня есть что-то похожее на это.Где "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 шаров в списке, что означает, что последние элементы не были удалены.