首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >If (变量==变量+ 5)

If (变量==变量+ 5)
EN

Stack Overflow用户
提问于 2017-05-31 18:27:10
回答 3查看 103关注 0票数 0

我试图在我的场景中展示一枚奖牌,这取决于你的高分是基于目标的水平。

代码语言:javascript
复制
// 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。

对此进行了一段时间的尝试,由于某种原因,它在上面的设置中工作,但是当我编写

代码语言:javascript
复制
    // Get Medal Colour
    if levelHighscore == goalScore+5 {
        scoreMedal = SKSpriteNode(imageNamed: "silverMedal")
    } 

什么都没显示出来。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-31 18:31:08

你需要你的比较才能像这样:

代码语言:javascript
复制
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")
}

重要的部分是先检查较高的值,然后检查较低的值。

为了使逻辑更加清晰,您可以将代码格式化如下:

代码语言:javascript
复制
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")
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2017-05-31 18:46:36

取决于你的品味,我觉得这有点容易阅读和理解。

代码语言:javascript
复制
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的回答是非常好的。

票数 5
EN

Stack Overflow用户

发布于 2017-05-31 20:09:44

这里有一些很好的答案,但我会选择做一些不同的。

首先,一系列具体的值有助于使用enum

代码语言:javascript
复制
/// 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
}

然后,我们添加一个初始化器,它需要一个分数和一个目标。我们还添加了一个返回imageSKSpriteNode属性

代码语言:javascript
复制
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")
    }
  }
}

然后,您可以简单地这样做,以获得图像:

代码语言:javascript
复制
let image = Medal(score: 14, goal: 10).image

代码语言:javascript
复制
let image = Medal.bronze.image
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44292202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档