稍后根据条件更新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属性设置为一个值。此后,标号0被改变为"0"或者换句话说是空的。在这种情况下,作为从场景中移除SKLabelNode的一种方法。有其他方法吗?为什么它没有更改文本。它停留在说";开始在森林中搜索你的朋友"即使是在下一个if案件之后。

这在一定程度上是猜测,因为您还没有显示足够的内容来确定,但每次调用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
}
}
}

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

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

最新更新