Hatena::ブログ(Diary)

miura1729の日記 このページをアンテナに追加 RSSフィード

2009-06-08

SDLが使えるようになりました.

23:00 |  SDLが使えるようになりました.を含むブックマーク  SDLが使えるようになりました.のブックマークコメント

f:id:miura1729:20090608232504j:image

不完全ですが、yarv2llvmからRuby/SDLを介してSDLが使えるようになりました。こんな手順で使えます。

Ruby/SDLに添付されているサンプルを動かそうとするとほとんど動きません.少なくともrequire 'sdl'はコンパイルエラーになるので、削除してください。Ruby/SDLはy2llib/sdl.rbで読み込んでいます.

取り合えず、sampleディレクトリ

  • sdltest.rb
  • testsplite.rb

の2つのプログラム(Ruby/SDLのサンプルを改造したもの)を添付しました.ご自由にお使いくださいと書いてあったので勝手に改変して添付しましたが、まずかったら教えてくださるとありがたいです.

y2llib/sdl.rbはこんな感じの定義です。

require 'yarv2llvm'
require 'sdl'

module YARV2LLVM
  MethodDefinition::RubyMethod[:open][:"SDL:Screen"] = {
    :argtype => [RubyType.fixnum, 
                 RubyType.fixnum, 
                 RubyType.fixnum, 
                 RubyType.fixnum],
    :rettype => RubyType.value(nil, "Return type of Screen#open", ::SDL::Screen),
  }

  MethodDefinition::RubyMethod[:load_bmp][:"SDL:Surfece"] = {
    :argtype => [RubyType.string],
    :rettype => RubyType.value(nil, 
                               "Return type of Screen#open", 
                               ::SDL::Surface),
  }



  MethodDefinition::RubyMethod[:poll][:"SDL:Event2"] = {
    :argtype => [RubyType.string],
    :rettype => RubyType.value(nil, 
                               "Return type of Event2#poll", 
                               ::SDL::Event2),
  }
end

<<-EOS
nil
EOS

結局、SDLのメソッドがどんなオブジェクトを返すか教えているわけです.これだけで拡張ライブラリが実行できてしまえるのはかなり驚いています.

追記

まったく同じプログラムがCRubyでも動くので比べてみたのですが、ほとんど変わりませんでした.もっと絵を生成するのに重たい計算をさせないとGPUOSばっかりが苦労する状態なのかなとおもいます.

これでゲームが作れそうです.かねがね作りたかったスノーボードゲームが作れないかなーと考えています。山をパーリンノイズで作ってごにょごにょって感じで。

ささだささだ 2009/06/09 07:25 なんとなく,似たようなことを考えてました.いやしかし,パワフルだなあ.

miura1729miura1729 2009/06/09 12:57 ありがとうございます。
Rubyの拡張ライブラリのフレームワークに乗っかっているのでたいしたことはしていないし、現実逃避モードなのでよそ事(yarv2llvm)が進むというのはあるかなと思います。祭りの運行警備計画を検討しないと・・・。

トラックバック - http://d.hatena.ne.jp/miura1729/20090608/1244469652