Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2009-05-14

[Ruby]Rubyのグラフィックライブラリの漠然とした案

こんなのどうだろう。

コンセプトは描画オブジェクトのインスタンスをクライアントで保持し続けないことと、あとループ処理を作らずにクロージャー。

WorldServer.start で世界を作る。 あとは描画物を create するとそこに自動的に描画される。 render メソッドとかいらない。

WorldServer.start

Image.create('sample.bmp', :x => 100, :y => 100)

loop {}

画像を移動させる。

WorldServer.start

img = Image.create('sample.bmp', :x => 100, :y => 100)

loop {
  img.x += 1
  vsync
}

クライアントでインスタンスを保持していなくても、 id があれば描画要素にアクセスできる。 ついでに vsync_callback 。

WorldServer.start

id = Image.create('sample.bmp', :x => 100, :y => 100).id
vsync_callback {
  Image.find(id).x += 1
}

loop {}

id を記録したらインスタンス保持するのと同じか。じゃあ名前でアクセスとか。

WorldServer.start

Image.create('sample.bmp', :name => :sample)
vsync_callback {
  Image.find_by_name(:sample).x += 1
}

loop {}

上のコードは下のようにも書ける。

WorldServer.start

Image.create('sample.bmp').vsync_callback {|e|
  e.x += 1
}

loop {}

下のように書いてもいい。

WorldServer.start

Image.create 'sample.bmp', :vsync_callback => lambda {|e| e.x += 1 }

loop {}

x キーで画像をひとつ追加。 z キーで描画要素をすべて削除。

WorldServer.start

x = 0
Input.x {
  Image.create('sample.bmp', :x => x)
  x += 10
}

Input.z {
  WorldServer.clear
}

loop {}