稍后根据条件更新 SKLabelNode 以具有不同的文本字段。 Swift SpriteKit

Update an SKLabelNode to have a different text field later on by a condition basis. 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 的一种方法。还有另一种方法吗?为什么它没有更改文本。它仍然说“开始为你的朋友搜索森林......”即使在下一个案例被处理后也是如此。

这有点猜测,因为您没有展示足够的东西来确定,但每次调用 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
    }
  }
}

您可以通过这种方式移除子节点,稍后在代码中,或使用时间变量持续时间。

label.run(SKAction.sequence([ SKAction.wait(forDuration: 14), SKAction.removeFromParent()]))