DXRuby周辺。キャラ管理ライブラリの可能性。

AIMSっつーモノが公開されている。
D.N.A.Softwaresさま開発のゲームエンジンで、言語はLuaだ。
http://aims.dna-softwares.com/


LuaはCのプログラムにインタプリタをリンクして、CのプログラムからLuaエンジンを呼び出して実行する。
通常の言語とは逆方向のアプローチによるマクロ言語としての使い方に焦点を当てた言語だ。
その性質から、実際に色んな市販のゲームでマクロとして採用されている。
DXRubyがRubyから呼び出すDirectXライブラリなら、AIMSはDirectXを扱うフレームワークであり、ゲームのスクリプトはマクロとしてLuaで書いて組み込むわけだ。
自由度と言う点ではDXRubyのほうが遥かに上だが、ある種のジャンルに特化すれば、AIMSのようなアプローチは非常に簡潔でわかりやすいものになる。


AIMSの機能は大きく分けてシーン管理とキャラ管理であり、毎フレーム1回ずつシーンの関数と全てのキャラの関数を呼ぶことで、ゲーム自体を制御する。
キャラの移動やアニメーションなどは、あらかじめ設定しておけば、キャラを作成するだけで自動で動く。
こういうのは俺も、DXRuby用の追加ライブラリとして作ってみたいとは思っていた。
自由度が高いというのは、逆に言えば全てを自分で作らなくてはいけなくて、いかにRubyと言えどもそれはやっぱり結構大変なことなのだ。
全てを自分で作りたい人も確かにいるが、全員がそうではなく、だからこそツクールなどのゲームツールが存在し、需要がある。


作るとすれば、必要な機能は結局のところシーン管理とキャラ管理であって、その点ではAIMSは非常によくできている。
当たり判定の機能もレイヤー単位で指定できたり、実際に自分でゲームを作っているからこそよく考えられた仕組みになっている。
しかもそれらフレームワークは全てCなりC++なりで書かれているわけだから、処理性能もそこそこ高いだろう。
そして最も強力なポイントは、フレームワーク自体がアプリそのものであり、それに特化した構造になっているため、ゲームのスクリプトがこれでもかと言わんがばかりに簡単なのである。


RubyでこういうものをRubyっぽく作ろうと思うと、どうしてもクラスライブラリになってしまう。
俺は、クラスライブラリは難しいものだと考えている。
使うだけのクラスなら簡単だが、仮想クラスを用意してそれを継承する、といった使い方になると、途端に難しくなる。
DXRubyがメソッドベースで、クラスを作らなくてもゲームが作れるようになっているのはそれが理由だ。
作れる人は作って有効に使えばいいが、それを必須にするのは抵抗がある。
しかし、シーン管理・キャラ管理のライブラリをメソッドベースで作るのはちょっと無理があるような気がする。
そこが、難しい。