トップ «前の日記(2006-11-23) 最新 次の日記(2006-11-28)» 編集

Route 477



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を使うものが多いようだ

[Ruby/SDL] DEBUG/RELEASE

「リリースビルドにすると落ちる」とか言ってる先輩を見て「C++は大変だなぁ」と思ってたら、 自分のプロジェクトでもDEBUG_MODE=falseにすると画面がちらつくというバグが出て焦った。 *1

*1 ちなみに原因は、デバッグメッセージの表示をオフにすると描画順序が変わって云々。

本日のツッコミ(全2件) [ツッコミを入れる]
ohai (2006-12-01 17:10)

nilに定義するのは気持ち悪いなあ。

yhara (2006-12-01 20:13)

ああ、Object.new の方が良かったですね。