否则如果条件没有执行语句

时间:2018-04-19 23:28:07

标签: ios swift if-statement sprite-kit

我正在构建一个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个条件都有效。

我确实尝试使用> =但效果与>相同。

任何人都知道为什么会这样吗?

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,因此这两个语句永远不能同时执行。

您只需更改ifelse 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。