如果(变量==变量+5)
我想在我的场景中显示某个奖牌,具体取决于您的高分是基于关卡的目标。如果(变量==变量+5)
// 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图像。如果它等于目标显示一个铜牌,如果高分比目标显示5银多,并且如果高分比目标高出10分显示一个金牌。
已在此的尝试所有不同的位和鲍勃一段时间,由于某种原因,它的工作原理在上面的设置,但是当我写
// Get Medal Colour
if levelHighscore == goalScore+5 {
scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
}
它说明不了什么。
你需要你的比较是这样的:
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")
}
}
}
现货!!!!这按预期工作!我会在7分钟内接受这个答案:) – LukeTerzich
鉴于这里正在发展的末日金字塔,我会推荐至少使用警卫来处理错误(noMedal)的情况。 – PeejWeej
@PEEJWEEJ我不推荐“厄运金字塔”。这仅仅是为了说明的目的。而为什么一个“警卫”呢?检查分数是否不足只是'if/else'中的另一个检查。 – rmaddy
取决于你的口味,我觉得这有点更容易阅读和理解。
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的回答非常好。
我喜欢这个。更干净。我花了35年编程C/C++/Java/Objective-C。我在斯威夫特度过了6个月。我需要不断提醒自己,比如更强大和更灵活的Swift'switch'语句。 – rmaddy
这里有一些很好的答案,但我会选择做一点不同。
首先,一系列的具体值的适合于使用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.image
也许你想'> ='而不是'==' – James
您需要使用'if'和'if else'来捕获范围而不是特定的值。 – paulvs
开关可能会更适合这个。现在是可能的,但在Swift 4中会更好:https://github.com/apple/swift-evolution/blob/master/proposals/0172-one-sided-ranges.md – PeejWeej