2006-11-24
■ [Ruby/SDL] 普通のオブジェクトへの特異メソッド定義とか
いつ使うんだよwと思ってたが、簡単なMockを作るときに使えそうだ。
Ruby/SDLでジョイスティックを扱うときは SDl::Joystick のインスタンスを使う。
if SDL::Joystick.num > 0 @joystick = SDL::Joystick.open(0) #1つめのパッド(1コン)を初期化 end
で、@joystick.axisや@joystick.hatで十字キーの情報が得られる*1。
が、上のコードだとパッドが刺さってないときに@joystickがnilになり、@joystick.axisが呼ばれた瞬間にNameErrorで落ちてしまう。
そこで下のようなコードを書くと、「axisとhatというメソッドを持つオブジェクト」を3行で簡単に作れる。
if SDL::Joystick.num > 0 @joystick = SDL::Joystick.open(0) else @joystick = nil #ダミーのジョイスティックをつくる def @joystick.axis(i) ; 0 ; end def @joystick.hat(i) ; nil ; end def @joystick.button(i); false; end end
なんとなく気持ち悪い気がしないでもないが(笑)
*1 axisとhatのどっちを使うかはパッドによるが、axisを使うものが多いようだ
nilに定義するのは気持ち悪いなあ。
ああ、Object.new の方が良かったですね。