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

