【问题标题】:Sprite Kit Updating Kills/Score/Health Labels dynamicallySprite Kit 动态更新击杀数/分数/健康标签
【发布时间】:2014-11-15 06:04:05
【问题描述】:

有什么最好的方法来制作一个带有杀戮、健康或分数的标签,随着与之相关的变量的变化而更新?目前我只是使用 SKLabelNode 并使用变量为其分配文本,但未计算文本属性,因此在初始化后它保持静态。每次我更改 MonsteredDestroyed 变量时,我都可以更新文本,但我觉得有更好的方法来做到这一点。

let label = SKLabelNode(fontNamed: "CoolFont")
label.text = "Kills: \(monstersDestroyed)"

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    没有更好的方法来做到这一点。您不能让 SKLabelNode “监听”变量的更改(实际上有一个称为 Key-Value Observing 的系统,但在这种情况下,它会是矫枉过正)。我建议设置一种方法来管理分数并在屏幕上更新它。调用该函数来更新和跟踪分数或任何其他要显示在屏幕上的变量将是一件简单的事情。

    let lblScore = SKLabelNode() //Label with global scope.
    var score:Int = 0 //The variable holding the score.
    
    func updateScoreWithValue (value: Int) {
        score += value
        lblScore.setText("\(score)")
    }
    

    您可以简单地使用该值调用此方法来增加/减少分数。

    self.updateScoreWithValue(10) //Adds 10 and updates it on screen.
    self.updateScoreWithValue(-10) //Subtracts 10.
    

    【讨论】:

    • 代码和标签是 Swift 而不是 Obj-C
    • 所以要做到这一点,我的标签需要有全局范围,回过头来看这是我避免这个实现的原因之一。
    • 你也可以在 score 上添加一个属性观察器来设置 lblScore。 var score:Int = 0 { didSet { lblScore.setText("(score)") } }。这样做的好处是,如果您曾经明确设置分数,那么标签将被更新。但是,在初始化时,不会调用属性观察者。
    【解决方案2】:

    每次我更改 MonsteredDestroyed 变量时,我都可以更新 文本,但我觉得有更好的方法来做到这一点。

    没有比这更好的方法了,你在正确的轨道上。

    【讨论】:

      【解决方案3】:

      正如 ZeMoon 所说,您始终可以使用 KVO 之类的东西来更新值。我自己,我更喜欢对何时进行更改进行更明确的控制,因此将自己设置值而不是 KVO。我通常做的是让所有值聚合,然后让 HUD 管理器确定值是否脏,然后相应地更新值。换句话说,HUD 管理器或多或少是一个“视图控制器”,将分数、健康等项目桥接到视图,即您的节点树。

      另外请注意,我通常会将我的 SKLabelNode 包装到另一个隐藏实现的对象中。这允许我仍然拥有一个文本属性,但如果我愿意,我可以更改我实际处理文本的方式。

      【讨论】:

      【解决方案4】:

      更好的方法是使用属性观察器。

      var shots: Int = 0 {
      didSet {
      shotsLabel.text = "\(shots)"
      }
      

      这样,每当您设置镜头值时,标签文本都会自动更改。

      编辑:我忘了提到你应该先检查shotsLabel 是否不为零,因为你可以在视图加载之前设置shots 变量。

      【讨论】:

      • 请详细说明这段代码是如何回答这个问题的。
      猜你喜欢
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多