if语句改变textLabel SKColor不执行

时间:2018-04-20 06:00:56

标签: ios swift if-statement sprite-kit

我正在尝试运行if语句来更改SpriteKit中生命数已达到一定数量的文本标签的颜色。但颜色并没有从白色变为红色。

在我的游戏中,每当小行星通过宇宙飞船时,生命减少1。

现在文本标签代码如下所示:

livesLabel.text = "Lives: 3"
livesLabel.fontSize = 70

if livesNumber == 1 {
   livesLabel.fontColor = SKColor.red
} else {
   livesLabel.fontColor = SKColor.white
}

livesLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.right

if UIDevice().userInterfaceIdiom == .phone {
   switch UIScreen.main.nativeBounds.height {
   case 2436: // Checks if device is iPhone X
       livesLabel.position = CGPoint(x: self.size.width * 0.79, y: self.size.height * 0.92)
   default: // All other iOS devices
       livesLabel.position = CGPoint(x: self.size.width * 0.85, y: self.size.height * 0.95)
   }
}

livesLabel.zPosition = 100
self.addChild(livesLabel)

我有一个函数,其中的livesNumber if语句工作正常,如下所示:

func loseALife() {

    livesNumber -= 1
    livesLabel.text = "Lives: \(livesNumber)"

    let scaleUp = SKAction.scale(to: 1.5, duration: 0.2)
    let scaleDown = SKAction.scale(to: 1, duration: 0.2)
    let scaleSequence = SKAction.sequence([scaleUp, scaleDown])

    livesLabel.run(scaleSequence)

    if livesNumber == 0{
        runGameOver()
    }
}

如果有人能够了解这一点,那就太棒了。我认为它可能与String或Int有关,但由于这适用于其他函数,我也尝试了一些String to Int转换,它没有改变,我不再确定问题是什么。

1 个答案:

答案 0 :(得分:1)

从上面的讨论中可以看出,问题是“颜色标签”代码在视图的初始化中运行了一次。因此,当稍后更新livesNumber值时,未执行“颜色标签”代码。

这可以通过几种方式解决。一种方法是将其添加到looeALife函数:

func loseALife() {
    livesNumber -= 1
    livesLabel.text = "Lives: \(livesNumber)"

    if livesNumber == 1 {
        livesLabel.fontColor = SKColor.red
    } else {
        livesLabel.fontColor = SKColor.white
    }

    let scaleUp = SKAction.scale(to: 1.5, duration: 0.2)
    let scaleDown = SKAction.scale(to: 1, duration: 0.2)
    let scaleSequence = SKAction.sequence([scaleUp, scaleDown])

    livesLabel.run(scaleSequence)

    if livesNumber == 0{
        runGameOver()
    }
}

(可能将其提取到单独的函数中)

您还可以在didSet添加livesNumber,然后在那里更新值:

var livesNumber: Int = 3 {
    didSet {
        livesLabel.color = livesNumber == 1 ? .red : .white
    }
}

希望有所帮助。