首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Area2D :检测Area2D内部的“鼠标按下”和Godot外部的“鼠标打开”

Area2D :检测Area2D内部的“鼠标按下”和Godot外部的“鼠标打开”
EN

Stack Overflow用户
提问于 2021-10-08 15:50:21
回答 1查看 215关注 0票数 2

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

这是我到目前为止所知道的:

代码语言:javascript
复制
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之外检测鼠标释放?

以下是节点结构:

EN

Stack Overflow用户

回答已采纳

发布于 2021-10-08 16:55:33

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

代码语言:javascript
复制
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上启用它

代码语言:javascript
复制
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)

这应该能起到作用。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69498580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档