如何在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
相关产品推荐
相关产品推荐

