Rubyのゲームライブラリを試す(後編)
前編に引き続き、Rubyで使えるゲームライブラリを見ていきます
これのうち、後半の2つが今回です
StarRuby
実は、評価した順で言うと、DXRubyの後にStarRubyでした
しかもコンセプトが非常によく似ており、
結果的に最後までどちらにするか悩みました
ちなみに、こちらはSDLのwrapperで、
DXRubyはDirectX依存というあたりが異なります
利点
- わりと簡潔
クラスやモジュールがぱっと見た感じ整理されて厳選されており、
少ないわりに必要十分な感じがします
- ドキュメントが親切
チュートリアルからAPIまで、必要な要素が揃っているので、
すぐに動くコードが書けます
DXRubyで書いたサンプルコードを移植するのも簡単でした
(インターフェースが似てるのもあるのですが・・・)
欠点
- DXRubyに比べて冗長
完全に比較したときの問題なのですが、DXRubyの方が抽象度が高く、
結果的にコード量が少ない感じがします
これはもう本当に比較したらって話なのですが・・・
# StarRuby Game.run(640, 480, :fps => 60) do |game| game.screen.clear # 画面クリア game.screen.render_texture(......) # 描画 end # DXRuby Window.loop do Window.draw(.....) # 描画 end
・・・これのどっちが簡潔か、って話でして、
私の好みは後者だった、というだけです
(画面のクリアとかはブロックの外でやってもらった方が・・・とか)
DXRuby
ここまでは全てSDLのwrapperでしたが、
このライブラリはDirectXのwrapperです
利点
- 処理が簡潔に書ける
- できることが必要十分かつ簡潔
- チュートリアルとサンプルがわかりやすい
この辺のコンセプトはStarRubyと非常によく似てます
ただ、こちらはメソッドの呼び出しが直感的でわかりやすいのです
「オブジェクトクラスのクラスメソッド」って形式なので、
見ただけで何がやりたいのかわかります
どのくらい簡単かというと、さっきも書きましたが・・・
Window.loop do end
・・・たったこれだけで、DirectXで制御された、
fps60で640x480のウィンドウが完成するのですΣ(・ω・ノ)ノ
さらに、キー入力もこんな感じで
Window.loop do break if Input.keyPush?(K_ESCAPE) end
これだけでも何が実行されるか、だいたいわかりますよね
そもそも、Rubyという言語自体、
いかにして簡潔に書くかに特化されているところがあり、
その意味で実に「Rubyらしい」構造で書けると思います
- ボタンを「押した時」と「押しっぱなし」を区別できる
StarRubyの場合、基本的に「押しっぱなし」状態になるのですが、
DXRubyだと入力一つだけ取り出すメソッドと、
連続的に取り出すメソッドが分かれているのです
(Input.keyPush? と Input.keyDown?)
今回のダンジョンは別に連続入力を求めておらず、
メソッドだけで切り替えできるこの仕組みは便利です
最初はそんなものかな・・・と思ったのですが、
StarRubyを扱った後だと、ああこっちがいいな・・・と
欠点
- Windowsでしか動かない
あくまでDirectXのwrapperですので、Windows限定です
まあ、Wineあたりを使えば動く気もしますが
- デフォルトのDirectXでは動かない
(10/5追記)
下記のFAQによると、スタティックリンク版であればDirectXのインストールは不要な模様
DXRuby プロジェクトWiki - FAQ
最近のWindowsだと、最初からDirectXが入っていることはよく知られていますが、
実は同じ「DirectX9」でも、かなりのアップデートが存在します
たいていのものはデフォルト構成で動くのですが、
ゲームによっては追加ランタイムが要求される場合があります
(最近私が見た例だと、「グランディアオンライン」とか)
DirectX エンド ユーザー ランタイム Web インストーラ http://www.microsoft.com/downloads/details.aspx?familyid=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&displaylang=ja
DXRubyもこの拡張ランタイムを要求するため、
ただ配布すれば動くとはならないわけです
プレイヤーにある程度の手間を強いることになり、これがマイナスです
(どうやらこのランタイムは「Managed DirectX」とか言うらしく、
.netからDirectXを叩くのに使われるようです)
というわけで長々書いてきましたが、
最終的に、利点が欠点を大幅に上回ったDXRubyで決めました(`・ω・´) b
後はゲームを作るだけ・・・とはいかず、
もう一点、考えないといけないことがあります
次回はそのあたりのお話を