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

如何在Godot 4.0中仅在窗口调整并释放鼠标左键后执行代码

在Godot 4.0中实现窗口调整完成后执行代码的方法

针对你需要在窗口调整完成(而非调整过程中)执行高开销方法的需求,这里提供两种可行方案:

方案一:定时器延迟检测(推荐,适配所有释放场景)

核心思路是:每次窗口尺寸变化时重启一个短定时器,只有当定时器正常跑完(说明一段时间内没有再调整窗口),才判定为调整完成并执行目标方法。这种方法不受鼠标释放位置(窗口内/外)的限制,可靠性更高。

实现步骤:

  1. 在主节点脚本中声明变量:
var _last_viewport_size: Vector2
var _resize_timer: Timer
  1. 初始化缓存尺寸并创建定时器:
func _ready():
    _last_viewport_size = get_viewport().get_size()
    # 创建定时器,设置延迟时间(可根据需求调整,比如0.1~0.2秒)
    _resize_timer = Timer.new()
    _resize_timer.wait_time = 0.1
    _resize_timer.one_shot = true
    # 绑定定时器超时信号到处理函数
    _resize_timer.connect("timeout", Callable(self, "_on_resize_complete"))
    add_child(_resize_timer)
    # 绑定视口尺寸变化信号
    get_viewport().connect("size_changed", Callable(self, "_on_viewport_size_changed"))
  1. 处理尺寸变化信号,重启定时器:
func _on_viewport_size_changed():
    _last_viewport_size = get_viewport().get_size()
    _resize_timer.start()  # 每次尺寸变化就重置定时器
  1. 定时器超时后执行高开销方法:
func _on_resize_complete():
    # 额外验证尺寸是否稳定(避免定时器触发前又有尺寸变化)
    if get_viewport().get_size() == _last_viewport_size:
        # 替换为你的高开销方法
        your_expensive_performance_method()

方案二:结合鼠标释放事件(仅适配鼠标在窗口内释放的场景)

如果你的场景中用户只会在窗口内释放鼠标,可以通过监听鼠标左键释放事件,结合尺寸变化标记来触发方法。但注意:若鼠标在窗口外释放,引擎无法检测到释放事件,此方法会失效。

实现步骤:

  1. 声明状态变量:
var _is_resizing: bool = false
var _last_viewport_size: Vector2
  1. 绑定视口尺寸变化信号:
func _ready():
    get_viewport().connect("size_changed", Callable(self, "_on_viewport_size_changed"))
  1. 标记调整状态:
func _on_viewport_size_changed():
    _is_resizing = true
    _last_viewport_size = get_viewport().get_size()
  1. 监听鼠标释放事件并执行方法:
func _input(event: InputEvent):
    # 检测鼠标左键释放
    if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and not event.pressed:
        if _is_resizing:
            # 延迟一帧确保尺寸稳定
            call_deferred("_execute_expensive_method")
            _is_resizing = false

func _execute_expensive_method():
    if get_viewport().get_size() == _last_viewport_size:
        your_expensive_performance_method()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:33:19