swift - 稍后根据条件更新 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 的一种方式。还有另一种方法吗?为什么它没有改变文本。即使在下一个案件被受理之后,它仍然说“开始在森林中寻找你的朋友......”。
解决方案
这有点猜测,因为您没有显示足够的信息来确定,但是每次您调用时,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
}
}
}
推荐阅读
- php - Codeigniter - 如何访问 result_array()
- python - 将带有列表和 dics 的 JSON 转换为数据框
- python - 带有“选择”的 BokehAPP 用于更改未显示其中一个图的图
- flutter - 使用 GestureDetector 的 onLongPressStart 每秒调整图标大小
- visual-foxpro - 如何检查项目/.exe 文件
- html - 如何实现标题和摄影师信用
- sas - 如何在 SAS 中对 Excel 文件进行不同的格式设置,例如粗体、斜体等?
- c# - 如何在紧凑模式下使用 MediaPlayerElement 移动窗口
- typescript - 如何指定排除已知继承索引键的类索引签名?
- python - 为什么我的 matplotlib.pyplot.hist 没有合并我的数据