You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot中Area2D实现检测内部鼠标按下、内外区域鼠标释放的方法

Godot Area2D跨区域鼠标释放事件检测实现方法

原代码的问题根源是_input_event是Area2D绑定碰撞形状的输入回调,仅当鼠标事件发生在Area2D的碰撞区域内时才会触发,因此鼠标移出区域后的释放事件不会被该回调捕获。

我们可以通过新增状态标记 + 全局输入监听的方式实现需求,逻辑如下:

  • 新增私有变量记录当前左键是否在本Area2D上处于按下状态
  • 区域内检测到按下动作时修改状态标记
  • 通过_input全局回调监听所有鼠标事件,当状态为已按下时,无论鼠标位置在哪都捕获对应的左键释放事件,完成后重置状态

完整实现代码:

extends Area2D #PickArea

# 记录是否在本区域按下了左键
var _is_left_pressed = false

func _input_event(viewport, event, shape_idx):
    if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
        if event.is_pressed():
            _is_left_pressed = true
            print("picked")
            # 如果需要独占本次点击事件可以取消下面的注释
            # get_viewport().set_input_as_handled()

func _input(event):
    # 仅当本区域触发过按下事件时,才监听释放
    if _is_left_pressed and event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
        if not event.is_pressed():
            print("released")
            _is_left_pressed = false

你的节点结构参考:
节点结构示意图

内容的提问来源于stack exchange,提问作者mandmeier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:09:00