我试图在我的场景中展示一枚奖牌,这取决于你的高分是基于目标的水平。
// Get Medal Colour
if levelHighscore < goalScore {
scoreMedal = SKSpriteNode(imageNamed: "noMedal")
} else if levelHighscore == goalScore {
scoreMedal = SKSpriteNode(imageNamed: "bronzeMedal")
} else if levelHighscore > goalScore {
scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
}目前,我得到了高分,并将其与目标进行比较--如果它小于目标,请显示noMedal图像。如果与目标相等,则显示一个bronzeMedal,如果高分比目标显示silverMedal多5分,如果高分比目标高10分,则显示goldMedal。
对此进行了一段时间的尝试,由于某种原因,它在上面的设置中工作,但是当我编写
// Get Medal Colour
if levelHighscore == goalScore+5 {
scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
} 什么都没显示出来。
发布于 2017-05-31 18:31:08
你需要你的比较才能像这样:
if levelHighscore < goalScore {
scoreMedal = SKSpriteNode(imageNamed: "noMedal")
} else if levelHighscore >= goalScore + 10 {
scoreMedal = SKSpriteNode(imageNamed: "goldMedal")
} else if levelHighscore >= goalScore + 5 {
scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
} else {
scoreMedal = SKSpriteNode(imageNamed: "bronzeMedal")
}重要的部分是先检查较高的值,然后检查较低的值。
为了使逻辑更加清晰,您可以将代码格式化如下:
if levelHighscore < goalScore {
scoreMedal = SKSpriteNode(imageNamed: "noMedal")
} else {
// We now know the score is greater or equal to goal
// First see if it's hight enough for gold
if levelHighscore >= goalScore + 10 {
scoreMedal = SKSpriteNode(imageNamed: "goldMedal")
} else {
// Nope, maybe it's silver
if levelHighscore >= goalScore + 5 {
// Yes, it's 5 or more but less than 10 over so it's silver
scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
} else {
// No, it's less than 5 over leaving bronze
scoreMedal = SKSpriteNode(imageNamed: "bronzeMedal")
}
}
}发布于 2017-05-31 18:46:36
取决于你的品味,我觉得这有点容易阅读和理解。
switch levelHighscore - goalScore {
case 0 ..< 5: scoreMedal = SKSpriteNode(imageNamed: "bronzeMedal")
case 5 ..< 10: scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
case 10 ... .max: scoreMedal = SKSpriteNode(imageNamed: "goldMedal")
default: scoreMedal = SKSpriteNode(imageNamed: "noMedal")
}然而,@rmaddy的回答是非常好的。
发布于 2017-05-31 20:09:44
这里有一些很好的答案,但我会选择做一些不同的。
首先,一系列具体的值有助于使用enum。
/// Raw values are the minimum for each Medal type.
/// For .none the raw value indicates any negative value
enum Medal: Int {
case none = -1
case bronze = 0
case silver = 5
case gold = 10
}然后,我们添加一个初始化器,它需要一个分数和一个目标。我们还添加了一个返回image的SKSpriteNode属性
extension Medal {
init(score: Int, goal: Int) {
switch score - goal {
case Medal.bronze.rawValue ..< Medal.silver.rawValue: self = .bronze
case Medal.silver.rawValue ..< Medal.gold.rawValue : self = .silver
case Medal.gold.rawValue ..< Int.max : self = .gold
default : self = .none
}
}
var image: SKSpriteNode {
switch self {
case .none : return SKSpriteNode(imageNamed: "noMedal")
case .bronze: return SKSpriteNode(imageNamed: "bronzeMedal")
case .silver: return SKSpriteNode(imageNamed: "silverMedal")
case .gold : return SKSpriteNode(imageNamed: "goldMedal")
}
}
}然后,您可以简单地这样做,以获得图像:
let image = Medal(score: 14, goal: 10).image或
let image = Medal.bronze.imagehttps://stackoverflow.com/questions/44292202
复制相似问题