【问题标题】:Godot: detect "mouse down" inside Area2D and "mouse up" OUTSIDE Area2DGodot:检测 Area2D 内的“鼠标按下”和 Area2D 外的“鼠标向上”
【发布时间】:2021-10-08 15:50:21
【问题描述】:

我想在 Area2D 内检测鼠标点击(并按住),然后在 Area2D 内或外检测鼠标释放。

这是我目前所拥有的:

extends Area2D #PickArea

func _input_event(viewport, event, shape_idx):
    if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
        if event.is_pressed():
            print("picked")
        else:
            print("released")    ## here be dragons. release only detected inside Area2D

上述方法有效,但它仅检测到 Area2D 内的鼠标释放。如何在 Area2D 之外检测鼠标释放?

这是节点结构:

【问题讨论】:

    标签: mouse godot gdscript


    【解决方案1】:

    您可以在_input 中获取Area2D 之外的输入事件。使用它来获取版本:

    func _input(event: InputEvent) -> void:
        if (
            event is InputEventMouseButton
            and event.button_index == BUTTON_LEFT
            and not event.is_pressed()
        ):
            print("released")
    

    但是,您只希望在获得媒体后才能获得它,对吗?所以,让我们在_ready_input 上禁用_input,并在_input_event 上启用它:

    extends Area2D
    
    func _ready():
        set_process_input(false)
    
    func _input_event(viewport: Object, event: InputEvent, shape_idx: int) -> void:
        if (
            event is InputEventMouseButton
            and event.button_index == BUTTON_LEFT
            and event.is_pressed()
        ):
            print("picked")
            set_process_input(true)
    
    func _input(event: InputEvent) -> void:
        if (
            event is InputEventMouseButton
            and event.button_index == BUTTON_LEFT
            and not event.is_pressed()
        ):
            print("released")
            set_process_input(false)
    

    这应该可以解决问题。

    【讨论】:

    • 工作就像一个魅力。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多