我有一些看起来像这样的东西。在哪里"网格"是一个单独的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个球,这意味着最后的项目从未被删除。
答案 0 :(得分:0)
非常简单的修复只需要删除OArray上的所有内容(即OArray.removeall)并且所有内容都在宇宙中很好 - 经验教训:当你累了时不要编码