我正在构建一个gameOver场景,如果你达到一定数量的积分,你可以获得1,2或3星。
我写了一个if Condition块,看起来像这样:
var starImage = SKSpriteNode()
if gameScore > 500 {
starImage = SKSpriteNode(imageNamed: "2_stars")
print("You achieved 2 Stars")
} else if gameScore > 1000 {
starImage = SKSpriteNode(imageNamed: "3_stars")
print("You achieved 3 Stars")
} else {
starImage = SKSpriteNode(imageNamed: "1_star")
print("You achieved 1 Star")
}
starImage.setScale(2)
starImage.position = CGPoint(x: self.size.width / 2, y: self.size.height * 0.9)
starImage.zPosition = 2
self.addChild(starImage)
2_stars和1_star工作正常,但是如果条件似乎没有执行,则其他。
然而奇怪的是,当我用等号(==)替换大于(>)符号时,所有3个条件都有效。
我确实尝试使用> =但效果与>相同。
任何人都知道为什么会这样吗?
答案 0 :(得分:5)
您可以使用switch
来确保永远不会发生这种情况:
let starCount: Int
switch gameScore {
case ...500: starCount = 1
case 501 ..< 1000: starCount = 2
case 1001...: starCount = 3
}
let sOrBlank = (starCount) == 1 ? "" : "s"
starImage = SKSpriteNode(imageNamed: "\(starCount)_star\(sOrBlank)")
print("You achieved \(starCount) Star\(sOrBlank)")
答案 1 :(得分:3)
你的逻辑是有缺陷的。如果您的初始else if
语句的计算结果为true,则if
语句只能求值为true,但由于您使用了else if
,因此这两个语句永远不能同时执行。
您只需更改if
和else if
分支的条件即可使其正常工作。
if gameScore > 1000 {
starImage = SKSpriteNode(imageNamed: "3_stars")
print("You achieved 3 Stars")
} else if gameScore > 500 {
starImage = SKSpriteNode(imageNamed: "2_stars")
print("You achieved 2 Stars")
} else {
starImage = SKSpriteNode(imageNamed: "1_star")
print("You achieved 1 Star")
}
答案 2 :(得分:2)
您的else if
条件永远不会被检查,因为即使它是1250,分数也总是大于500.因此,只发出2颗星。
更改初始if以检查分数是否大于500且小于1000。