首页 > 解决方案 > _load_data:条件 !f 为真。返回: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被点击的次数。尽管出现错误,当我启动游戏时,无论我点击哪里,它都会计数。

标签: godotgdscript

解决方案


好的,这是一种解决方法,但这会起作用(我已经在 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。这将在您单击之前跟踪鼠标是否实际位于您的区域上。测试时,单击 时会计数,但单击其他​​任何位置时不会scoreLabel计数。Area2D

我知道这是一种骇人听闻的解决方案——我见过更好的建议,但它们似乎不适用于这种情况(无论你点击哪里,标签都会计数)。至少这种方法确实有效。

希望这可以帮助。


推荐阅读