Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
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