_load_data:条件 !f 为真。返回:ERR_CANT_OPEN(戈多)

_load_data: Condition !f is true. Returned: ERR_CANT_OPEN (Godot)

我大约 2 周前开始使用 Godot,但在这段代码上得到了 _load_data: Condition !f is true. Returned: ERR_CANT_OPEN (Godot)

extends Area2D

var points = 0
var pointAdder = 1
var pointMultiplier = 1
# Called when the node enters the scene tree for the first time.
func _input(event):
    if event is InputEventMouseButton:
        if event.button_index == BUTTON_LEFT and event.pressed:
            points = (points + pointAdder)*pointMultiplier
            get_node("../scoreLabel").text = str(points)

节点树:

Spatial (Node)
 ├─backgroundMap :: TileMap
 └─scoreLabel :: Label
    ├─treeClickableArea :: Area2D <<
    ├─treeSprite :: Sprite
    └─treeCollider :: CollisionShape2D

我正在尝试显示 treeCollider 被点击的次数。当我启动游戏时出现错误,无论我点击哪里,它都会计数。

好的,这是一种解决方法,但这会起作用(我已经在 Godot 3.2 上测试过)

保持相同的节点设置 - 最终代码如下所示:

extends Area2D

var points = 0
var pointAdder = 1
var pointMultiplier = 1
var mouseover = false

func _input(event):
    if (mouseover and event is InputEventMouseButton && event.pressed):
            points = (points + pointAdder)*pointMultiplier
            get_parent().get_node("scoreLabel").text = str(points)

func _on_Area2D_mouse_entered():
    mouseover = true

func _on_Area2D_mouse_exited():
    mouseover = false

从底部的两个函数可以看出,您必须将 2 个信号连接到 Area2D:mouse_entered()mouse_exited()。当它询问要连接到哪个节点时,连接到它自己(选择相同的 Area2D)。

为了完成这项工作,我添加了变量 mouseover 并将其设置为 false。对于 mouse_entered() 信号,mouseover 设置为 true。对于 mouse_exited(),它被设置为 false。这将在您单击之前跟踪鼠标是否确实在您的区域上方。测试时,scoreLabelArea2D 被点击时计数,但在点击其他地方时则不会。

我知道这是一种骇人听闻的解决方案 - 我见过更好的建议,但它们似乎不适用于这种情况(无论您单击何处,标签都会增加)。至少这个方法肯定有效。

希望这对您有所帮助。