Gosu,如何检测何时按下键?

Gosu, how to detect when key is pressed?

我想在玩家按下左光标或右光标时左右移动我的角色。

Gosu 中的 update 函数如何检测按键被按下?

有两种方法可以检测按钮何时被按下。

使用事件侦听器

This method is called before #update if a button is pressed while the window has focus.

当你只想在按钮从松开到按下的瞬间触发某些东西(射击、跳跃……)时的理想选择

正在检查此帧中的按钮是否按下

Returns whether the button id is currently pressed

当你想继续做某事直到按键仍然被按下(移动,...)时的理想选择


这是包含两个系统的代码:

class MyGame < Gosu::Window
  def initialize
    @x = 100
    @y = 100
    @velocity = 3
  end

  def button_down(button_id)
    case button_id
    when Gosu::KB_ESCAPE
      close
    when Gosu::KB_SPACE
      shoot
    else
      super
    end
  end

  def update
    move_left if Gosu.button_down? Gosu::KB_LEFT
    move_right if Gosu.button_down? Gosu::KB_RIGHT
    move_up if Gosu.button_down? Gosu::KB_UP
    move_down if Gosu.button_down? Gosu::KB_DOWN
  end

  def shoot
    puts "Shoot!"
  end
  
  def move_left
    @x -= @velocity
  end
  
  def move_right
    @x += @velocity
  end
  
  def move_up
    @y -= @velocity
  end
  
  def move_down
    @y += @velocity
  end
end

Gosu.button_down?()

Gosu.button_down?(Gosu::<BUTTON>)

这是BUTTON constants的列表。