首页 > 解决方案 > 稍后根据条件更新 SKLabelNode 以具有不同的文本字段。Swift SpriteKit

问题描述

在 SpriteKit 中使用最新的 swift。我想更新 SKLabelNode 中定义的标签内的文本。看看下面。它不会显示运行错误,但不会更改文本节点。有什么帮助吗?

    func lookforThings() {
        if player.position.x > -240 {
            let label0 = SKLabelNode()
            addChild(label0)
            label0.text = "Start searching the forest for your friends..."
            label0.position.x = 12
            label0.position.y = 112
            label0.zPosition = 0.5
            label0.fontSize = 12
            label0.fontColor = SKColor.green
            if player.position.x > 100 {
                label0.text = ""
            }
        }

Label0 在上面被初始化,然后使用 .text 属性设置为一个值。之后,label0 变为 "" 或为空。作为在这种情况下从场景中移除 SKLabelNode 的一种方式。还有另一种方法吗?为什么它没有改变文本。即使在下一个案件被受理之后,它仍然说“开始在森林中寻找你的朋友......”。

标签: swiftsprite-kit

解决方案


这有点猜测,因为您没有显示足够的信息来确定,但是每次您调用时,lookForThings您都会创建一个新标签并将其添加到场景中。之前添加的任何标签都不会受到影响,因此您可能正在构建一堆标签,其中大部分都显示“开始搜索”消息。它们都在同一个地方,所以你不会注意到它们是不同的。

可能你想要一个标签,当玩家在相关区域时应该出现,而不是在不在时删除。像这样的东西:

class GameScene: SKScene {
  var searchingLabel: SKLabelNode?

  func lookForThings() {
    if player.position.x > -240 && player.position.x <= 100 {
      // Show the searching message
      guard searchingLabel == nil else { return }  // Already shown
      let label = SKLabelNode()
      addChild(label)
      label.text = ... // Set up the label as desired
      searchingLabel = label
    } else {
      // Don't show the message
      guard let label = searchingLabel else { return }  // Already removed
      label.removeFromParent()
      searchingLabel = nil
    }
  }
}

推荐阅读