【问题标题】:Do instanced objects Area 2D's not detect the mouse实例化对象区域 2D 是否检测不到鼠标
【发布时间】:2019-11-20 00:37:59
【问题描述】:

我正在尝试获取一个动态实例化的 kinematicBody2D,其中附加了一个 2D 区域来处理鼠标输入/退出输入。我已经用正确的碰撞体创建了我的 2D 区域,并测试了一个类似的碰撞体来检测一些 2d 区域,这很正常,但是,鼠标检测并没有触发它应该触发的功能。

我不确定为什么它似乎没有检测到我的鼠标。我假设我错误地弄乱了面具,并且不在同一级别,但是查看一些文档并不认为这是一个问题。

我不确定要附加什么代码,因为此时它还没有真正编码。

任何帮助将不胜感激。

【问题讨论】:

    标签: godot gdscript


    【解决方案1】:

    要检测区域或运动体上的鼠标事件,请将input_pickable 设置为true 并连接到一个或多个provided signals

    KinematicBody2DArea2D 都继承自CollisionObject2D,因此它们都可以处理鼠标输入。这意味着您不需要Area 添加到您的KinematicBody 除非检测点击的区域需要不同于检测碰撞的区域(例如只有大对象的一小部分是可点击的)。

    以下是在KinematicBody 上使用CollisionShape 检测鼠标事件的方法:

    func _ready():
        input_pickable = true
        connect("mouse_entered", self, "_on_mouse_entered")
        connect("mouse_entered", self, "_on_mouse_entered")
        connect("input_event", self, "_on_input_event")
    
    func _on_mouse_entered():
        print("mouse entered")
    
    func _on_mouse_exited():
        print("mouse exited")
    
    func _on_input_event(viewport, input_event, shape_idx):
        var mouse_event = input_event as InputEventMouseButton
        if mouse_event:
            prints("Mouse button clicked:", mouse_event.button_index)
    

    【讨论】:

    • 嗨@rcorre,感谢您的输入。如果我在调用动态实例对象的场景中对此进行测试,则效果很好,但是,使用相同的代码,但嵌入到另一个场景中,此交互不再有效。
    • 你能提供一个minimal example吗?如果没有更多细节,任何人都很难猜出确切的问题是什么。
    • github.com/benpotter480/simplified-godot-mouse-entered-issues 是简化版本的存储库。当动态实例化场景自行运行时,您将能够看到(希望如此)这是可行的,但是当实例化时,这不再发生。
    • @notme21 你在你的例子中有一个完全不同的问题。您添加的Panel 正在捕获鼠标输入。您可能想为此提出一个单独的问题,因为不清楚您为什么在那里拥有 Panel 或您期望它做什么。
    • 该面板正在捕获鼠标输入,这就是实例场景中的函数未触发的原因。
    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多