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 {}