2006-04-12
          [MyGame]イベントのサンプル
require 'mygame'
include MyGame
init_game
image = TImage.new('ball.bmp')
x, y = 0, 0
add_event(:mouse_motion) {|event| x, y = event.x, event.y }
loop_game do
  image.draw screen, x, y
end
            こうも書ける。
image = TImage.new('ball.bmp')
add_event(:mouse_motion) {|event| image.x, image.y = event.x, event.y }
loop_game do
  image.draw
end
            デフォルトでループ終了のイベントが2つ登録されている。
add_event(:quit, :cloase) { @@loop_end = true }
add_event(:key_down, :cloase) {|e| @@loop_end = true if e.sym == SDL::Key::ESCAPE }
            これらを取り除くにはこうする。
remove_event(:quit, :cloase) remove_event(:key_down, :cloase)
__
ちなみにイベント呼び出しはループ内でこう実装されている。
while event = SDL::Event2.poll
  event.class.name =~ /\w+\z/
  name = $&.gsub(/([a-z])([A-Z])/) { "#{$1}_#{$2.downcase}" }.downcase
  (@@events[name.to_sym] || {}).each {|key, block| block.call(event) }
end