Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2008-04-17

タイポとかのメモ

http://dgames.jp/dan/?tmruby

artonさんにタイポをご指摘いただいたのでメモページを作った。

2008-04-17

Ruby/SDLとStar Rubyの描画速度比較

Star Rubyの描画速度を知りたかったので、 次のようなコードでRuby/SDLと速度を比較した。

Ruby/SDLのコード

引数で画像ファイル名を受け取り、その画像をロードして描画。 5000×60回描画を繰り返す。 第2引数でモードを受け取り、モードに応じて通常描画、アルファ処理、回転、拡大処理を行う。

# sdl_bench.rb
require 'sdl'

SCREEN_W = 256
SCREEN_H = 256
SDL.init(SDL::INIT_VIDEO) 
screen = SDL.setVideoMode(SCREEN_W, SCREEN_H, 16, SDL::SWSURFACE) 
image = SDL::Surface.load(ARGV.shift)
image.setColorKey(SDL::SRCCOLORKEY, image.getPixel(0,0))
image = image.displayFormat

x, y = 50, 50
render = lambda {
  SDL.blitSurface(image, 0, 0, 0, 0, screen, x, y)
}
case ARGV.shift
when 'alpha'
  image.set_alpha(SDL::SRCALPHA, 50)
when 'angle'
  angle = 18
  render = lambda {
    SDL.transform_blit(image, screen, angle, 1, 1, 0, 0, x, y, 0)
  }
when 'scale'
  scale = 2.0
  render = lambda {
    SDL.transform_blit(image, screen, 0, scale, scale, 0, 0, x, y, 0)
  }
end

t = Time.now
60.times do
  screen.fillRect(0, 0, SCREEN_W, SCREEN_H, [0, 0, 128])
  5000.times(&render)
  screen.updateRect(0, 0, 0, 0) 
end
p Time.now - t

Star Rubyのコード

機能はRuby/SDL版と同じ。

# star_bench.rb
require "starruby"
include StarRuby

texture = Texture.load(ARGV.shift)

opts = {}
case ARGV.shift
when 'alpha'
  opts = { :alpha => 100 }
when 'angle'
  opts = { :angle => 0.314 }
when 'scale'
  opts = { :scale_x => 2.0, :scale_y => 2.0 }
end

x, y = 50, 50
render = lambda {
  Game.screen.render_texture(texture, x, y, opts)
}

Game.fps = 1000
counter = 0
t = Time.now
Game.run(256, 256) do
  Game.screen.clear
  5000.times(&render)
  break if (counter+=1) >= 60
end
p Time.now - t

実行環境

  • OS: WidowsXP
  • Ruby: ruby 1.8.6 (2008-03-03 patchlevel 114) [i386-mswin32]
  • Ruby/SDL: Win32's binary(ver 1.3.1) for Ruby 1.8
  • Star Ruby: starruby-0.1.17-win32.zip
  • ビデオカード: 詳しくわからないけどゲーム用のPCじゃない

※手元のPC1台で確認しただけなので、以下の結果は一般的なものと大きく異なる可能性がある。

結果

Ruby/SDL

ruby sdl_bench.rb  star.png       #=>  0.578秒
ruby sdl_bench.rb  star.png alpha #=>  2.547秒
ruby sdl_bench.rb  star.png angle #=>  7.969秒
ruby sdl_bench.rb  star.png scale #=> 11.422秒

Star Ruby

ruby star_bench.rb star.png       #=>  1.938秒
ruby star_bench.rb star.png alpha #=>  2.062秒
ruby star_bench.rb star.png angle #=>  3.313秒
ruby star_bench.rb star.png scale #=>  8.172秒

star.pngはStar Rubyのサンプルデータ。16x16の画像データ。タイムは2回実行して小さい方を採用した。

基本描画はRuby/SDLの方が圧倒的に早い。半透明、回転、拡大処理を行うとStar Rubyの方がやや速度で上回る。 この結果を見る限り、Star Rubyは素の描画が遅い。 Ruby/SDLの1/3以下の速度しか出ていない。

使用する画像を200x150のサイズに変更すと次のような結果に。描画回数は500×60回で計測。

ruby sdl_bench.rb  ruby.png       #=>  3.484秒
ruby sdl_bench.rb  ruby.png alpha #=> 39.562秒
ruby sdl_bench.rb  ruby.png angle #=> 18.922秒
ruby sdl_bench.rb  ruby.png scale #=> 40.296秒
 
ruby star_bench.rb ruby.png       #=>  6.656秒
ruby star_bench.rb ruby.png alpha #=>  7.562秒
ruby star_bench.rb ruby.png angle #=> 23.765秒
ruby star_bench.rb ruby.png scale #=> 29.547秒

Star Rubyの速度改善に期待

通常の描画がRuby/SDLと同等以上で、各種変形操作を行ったときも速度比でみたときに、 今より速度低下が少ないと嬉しい。

まだまだ速くなるはず。

2008-04-13

Star Ruby Version 0.1.17

リリースされてた。

2008-04-13

はじめてのRubyプログラミング

http://www.amazon.co.jp/o/ASIN/4798019437/dgames0a-22

おかげさまで2冊目の書籍を出すことができました。

今回も何人もの方々にご協力いただきました。どうもありがとうございました。

--

去年の春から2年間も締め切りに追われていた。やっと解放された。もう書きたくない。これのせいでずっと開発も止まってたし。

2008-04-03

[栽培日誌]野菜の話

http://d.hatena.ne.jp/yappo/20080330/1206809229

yappoさんの野菜の話。

かたくなに農薬も化学肥料も使わずにせっせと野菜を作り続けているオレからすると、 ちょっと言いすぎかなという感じはするけど、でもまあ自分もそれを目指してる。

オレ自身、自然農法を目指して、試行錯誤してるけど、いろいろ難しい。 うまくいくところと、いかないところがある。とりあえず大根は耕さなくても育つ。それは本当。

種の保守、シードセイバーに関するいい本があるんだけどタイトル忘れた。

yappoさん、ニンニクの育ちはどうですか? うちのは去年は小さいのしか収穫できなかったんだけど、今年のやつは油粕と一緒に埋めたせいか茎がものすごく太く(1.5〜2cmくらい)なってますよ。

2008-04-03

スパムが増えてきたな

そろそろ対策のしごろかな。