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時間くらいはまりました・・・