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

Ruby中LibGosu按键输入问题:如何获取用户按下的按键ID?

在LibGosu中获取当前按下的所有按键ID

好问题!LibGosu本身并没有提供一个直接返回所有当前按下按键ID的内置方法,但我们可以轻松自己实现这个功能——核心思路就是遍历可能的按键ID,用你已经熟悉的Gosu.button_down?来逐个检测。

实现方法示例

下面是一个简单的方法,能收集当前所有被按下的按键ID:

def get_pressed_key_ids
  pressed_ids = []
  
  # 遍历常见的字母、数字、功能键ID范围
  (Gosu::KB_0..Gosu::KB_F12).each do |key_id|
    pressed_ids << key_id if Gosu.button_down?(key_id)
  end
  
  # 补充检测特殊按键(方向键、修饰键等)
  special_keys = [
    Gosu::KB_UP, Gosu::KB_DOWN, Gosu::KB_LEFT, Gosu::KB_RIGHT,
    Gosu::KB_SHIFT, Gosu::KB_CTRL, Gosu::KB_ALT, Gosu::KB_SPACE
  ]
  special_keys.each do |key_id|
    pressed_ids << key_id if Gosu.button_down?(key_id)
  end
  
  pressed_ids.uniq # 去重,避免重复添加同一按键
end

额外:将按键ID转为可读字符

如果需要把获取到的ID转换成对应的按键字符(比如把Gosu::KB_A转成"a"),可以用Gosu.button_id_to_char方法:

pressed_ids = get_pressed_key_ids
pressed_chars = pressed_ids.map { |id| Gosu.button_id_to_char(id) }
puts "当前按下的按键:#{pressed_chars.join(', ')}"

扩展提示

如果需要覆盖更多小众按键,可以扩大遍历的ID范围(比如从0到255),因为LibGosu的大部分按键ID都落在这个区间内。你可以根据自己的需求调整遍历的范围,只保留你关心的按键类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:02:11