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

如何在DragonRuby Game Toolkit中捕获鼠标双击事件?

DragonRuby Game Toolkit 鼠标双击检测实现

DragonRuby本身并没有内置的双击检测属性,所以还是得通过判断两次点击的时间间隔来实现,但可以用mouse.previous_click简化代码,不用像你那样维护额外的队列。

优化后的实现代码

def defaults(args)
  # 初始化双击触发标记,防止重复执行逻辑
  args.state.double_click_triggered = false
end

def input(args)
  # 同时存在当前点击和上一次点击时才判断
  if args.inputs.mouse.click && args.inputs.mouse.previous_click
    # 计算两次点击的帧差(DragonRuby的created_at是以帧为单位,默认60帧/秒)
    frame_diff = args.inputs.mouse.click.created_at - args.inputs.mouse.previous_click.created_at
    # 设定双击的帧阈值,20帧≈333ms,和系统默认双击间隔接近
    if frame_diff <= 20 && !args.state.double_click_triggered
      # 这里写你的双击处理逻辑
      puts "双击触发!"
      # 标记已触发,避免同一组双击被重复检测
      args.state.double_click_triggered = true
    end
  elsif !args.inputs.mouse.click
    # 没有点击时重置标记,允许下一次双击检测
    args.state.double_click_triggered = false
  end
end

关键点说明

  • 用mouse.previous_click直接获取上一次点击的数据,省去了维护队列的麻烦,代码更简洁
  • created_at的单位是帧,默认60FPS,所以20帧对应约333ms,这个数值可以根据你的游戏手感调整(比如15帧=250ms,25帧≈416ms)
  • 加入double_click_triggered标记是因为input方法每帧都会执行,防止同一组双击被多次触发

至于你想避免依赖阈值的需求,其实双击的本质就是短时间内的两次连续点击,阈值是判断双击的必要条件,DragonRuby目前没有提供无需阈值的内置实现方式,所以合理调整阈值就是最优的方案了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:30:41