我正在尝试运行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转换,它没有改变,我不再确定问题是什么。
答案 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
}
}
希望有所帮助。