Godot中通过屏幕按钮修改进度条值的正确方法及节点错误解决
错误原因
你用的绝对路径/root/ProgressBar不对——从报错信息能看到,你的Button节点在/root/Node2D/Button下面,说明ProgressBar肯定不在/root根节点,大概率和Button是同层级节点(都挂在Node2D下面),所以绝对路径应该是/root/Node2D/ProgressBar,但更推荐用相对路径,避免节点结构变动时路径失效。
修正后的代码方案
方案1:用相对路径直接修改
extends Button var health = 0 func _pressed(): health += 10 print(health) # 相对路径:..表示当前节点的父节点(Node2D),再找到其子节点ProgressBar get_node("../ProgressBar").value = health # 如果是Godot 3版本,也可以用set_value(health)
方案2:提前缓存节点引用(更高效)
每次点击都调用get_node会有微小性能开销,建议在节点就绪时缓存ProgressBar的引用:
extends Button var health = 0 var progress_bar: ProgressBar # 声明类型,方便编辑器提示 func _ready(): # 缓存ProgressBar节点 progress_bar = $../ProgressBar # $是Godot的节点路径快捷写法,等价于get_node func _pressed(): health += 10 print(health) progress_bar.value = health
额外注意
- 先确认你的节点结构:ProgressBar必须和Button在同一个父节点(Node2D)下,如果结构不同,要对应调整路径(比如ProgressBar是Button的子节点,就用
$ProgressBar)。 - Godot 4里
set_value()已经被简化为直接赋值.value,如果用Godot 3两种写法都可以。
内容的提问来源于stack exchange,提问作者Log Milk
相关产品推荐
相关产品推荐

