从游戏场景转换回来时无法更新游戏场景实例变量

时间:2018-04-26 06:53:30

标签: swift sprite-kit

我有一些看起来像这样的东西。在哪里"网格"是一个单独的sksprite节点,它绘制一个纹理,其他精灵被初始化,最后一个touple列表被初始化。

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)
}

...

}

我遇到的问题是,当我转换到场景中的游戏时,由于球的数量是否达到零(实际上是触发)的更新触发,我将游戏称为功能和将游戏结束标志设置为true:

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)
}

一切都按预期工作,我能够从场景中的游戏过渡回到这个游戏场景。除了int元组的ball数组之外,所有实例变量都会重新初始化。我知道bool标志被重新加载,因为最终我的终端再次开始打印计数,但我也知道我的数组不会重新初始化,因为打印到终端的计数恰好是它最终达到的原始大小的两倍。

例如,如果我按原样初始化数组:

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

假设此功能最终获得球列表中30个附加项的最终计数。下次游戏场景循环时,终端将在列表中打印60个球,这意味着最后的项目从未被删除。

1 个答案:

答案 0 :(得分:0)

非常简单的修复只需要删除OArray上的所有内容(即OArray.removeall)并且所有内容都在宇宙中很好 - 经验教训:当你累了时不要编码