hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

ruby-processingによるキー入力取得処理


スポンサーリンク


Processingにはキーの入力を判定するのに、イベント関数であるkeyPressed()とフィールドとしてのkeyPressedがある・・・が、Ruby流の書き方をすると両方ともkeyPressedとなってしまって区別がつかない。
というわけで、別の名前がついてますね。
イベントの方は、keyPressed。
フィールドの方は、key_pressed?。


というわけで、キー入力判定処理はこうなります。

class RubyKeytest < Processing::App

  def setup
    frameRate 10
  end

  def draw
    if key_pressed? then
      p "key_pressed!"
      if key == CODED then
        p "UP"     if key_code == UP
        p "DOWN"   if key_code == DOWN
        p "LEFT"   if key_code == LEFT
        p "RIGHT"  if key_code == RIGHT
      else
        p key
      end
    end

    if mouse_pressed? then
      p "mouse_pressed!"
      p "MOUSE_LEFT"  if mouse_button == LEFT
      p "MOUSE_RIGHT" if mouse_button == RIGHT
      p mouseButton == LEFT
    end
  end

end

RubyKeytest.new :title => "Ruby Keytest", :width => 640, :height => 480

これは、frameRateに同期してキー入力を取得する場合。


イベントでキー入力を取得する場合は、こうなる。

class RubyKeytest < Processing::App

  def setup
    frameRate 10
  end

  def draw
  end

  def keyPressed
    p "key_pressed!"
    if key == CODED then
      p "UP"     if key_code == UP
      p "DOWN"   if key_code == DOWN
      p "LEFT"   if key_code == LEFT
      p "RIGHT"  if key_code == RIGHT
    else
      p key
    end
  end

  def mousePressed
    p "mouse_pressed!"
    p "MOUSE_LEFT"? if mouse_button == LEFT
    p "MOUSE_RIGHT" if mouse_button == RIGHT
    p mouseButton == LEFT
  end

end

RubyKeytest.new :title => "Ruby Keytest", :width => 640, :height => 480


ただ、どちらにしろWindowをアクティブにした後、描画エリア内で一度マウスをクリックしないとキー入力が検出できません*1。これは、アプレット?の制限なのかなぁ?

*1:1時間くらいはまりました・・・