記録
まあ、今回はスクリプト側をいじっての記録だから反則だが。
Ruby1.9.1+DXRuby1.0.3+DXRubyExtension0.0.5にて。
同じことをするのに極限まで処理を削ったらどこまで速くなるのか、ということで試してみた。
ここまでやっても10000到達できないのが悲しい。
数字そのものは環境によって大きく変わるからあまり意味は無いのだが、気分的なものだ。
DXRubyの基礎部分をこれ以上速くするのはいまのところ難しく、このレベルのシンプルなスクリプトの実行速度を改善する周辺ライブラリのアイデアも無く。
どうやらここらへんがRubyでの限界速度と考えてよさそうだ。
出し惜しみしてもしょうがないからスクリプトも置いておこう。
こんな感じ。
# DXRubyサンプル。元ネタはRubyゲーム開発のハブサイトさま。 require "dxruby" require "dxrubyex" class Array include ArrayExtension end # Imageオブジェクトを作成 IMAGE = Image.load("ruby.png") class Sprite MAX_X = 640 - 32 - 1 MAX_Y = 480 - 32 - 1 def initialize @x = rand(MAX_X + 1) @y = rand(MAX_Y + 1) @vx = rand(2) * 2 - 1 @vy = rand(2) * 2 - 1 end def update @x += @vx @y += @vy if @x <= 0 or MAX_X <= @x @vx = -@vx end if @y <= 0 or MAX_Y <= @y @vy = -@vy end # 画像を画面に対して描画する。 Window.draw(@x, @y, IMAGE) end end # Sprite オブジェクトの配列を生成する。 sprites = Array.new(8000){ Sprite.new } font = Font.new(32) # ウィンドウのキャプションを設定する。 Window.caption = "Sprites" # fpsを設定する。 Window.fps = 60 Window.frameskip = false # メインループ。 # ウィンドウが閉じられた場合は自動的に終了する。 # 画面は毎フレームリセットされる。 Window.loop do # sprites配列の増減 if Input.keyDown?(K_RIGHT) then 10.times do sprites.push(Sprite.new) end end if Input.keyDown?(K_LEFT) then 10.times do sprites.pop end end # ESC キーが押された場合終了する。 break if Input.keyPush?(K_ESCAPE) # Sprite オブジェクトそれぞれについて処理する。 sprites.hs_each(:update) Window.drawFont(0,0,Window.fps.to_s+" fps", font) Window.drawFont(0,40,sprites.size.to_s+" objects", font) end