キャラ管理ライブラリを考える再び

いろいろなことをバラバラに少しずつ考える。
まとめて一気に作らないのは、根本的に経験が不足しているからだ。
ゲームを作る経験が豊富であれば、そこから導き出される最適な設計もわかるだろうが、俺にはそういうのがないから、ちょっとずつ考えては寝かせて、また考え直して、を繰り返す。
考え中のものをたくさんもっていると、何かの拍子にひらめいたりするのだ。
DXRubyExtensionも改良するでもなく機能を追加するでもなく、ずっとほったらかしになっているのは、ほんとに仕様はこれでいいのかときどき検討し直しているからだ。
ちょっとバグが見つかって昨日修正したところだが、他には特に問題もなさそうだから、このままの仕様で1.0.0にしてもいいんじゃないかと思ったところで、DXRubyExtensionにキャラ管理ライブラリを含めようかどうしようかと考えていたことを思い出した。


キャラ管理のフレームワークについても少しずつ考えている。
もともとはAIMSを参考にしようとしていて、どうしてもその仕様が複雑というか、Rubyぽくないというか、俺ぽくないので困っていたのだ。
力技で作っても、気に入らないものになりそうで。
んで最近、具体的な使い方のイメージと高速動作が可能な実装を考えていて、LunaJavaのような形にすることを思いついた。
るびまサンプルを作ったときに、DXRubyExtensionの判定を使うならLayerっているんだろーか、というのを疑問に思ったことも一因。
描画順も判定も、すでにあるのだ。
それを簡潔に処理するためのLayerなら、存在する必要はないはずだ。
唯一、キャラ種ごとに処理順をまとめたい場合にのみ有効だと思うが、それを気にするほど厳密なゲームというのもあまりなさそうだし、用途外ということにすればとても簡単になる。
必要だったとしても、なんか細工すればどーにでもなりそうな気もする。


そうすると、フレームワークに必要なのは、ゲーム全体を管理するクラスとActorクラスという2段がまえになる。
ゲーム全体を管理するというか、たぶん、メインループを内包したシーンクラスになるだろう。
シーンオブジェクトのActorを入れる配列に、Actorクラスから派生したユーザー定義のクラスのオブジェクトを突っ込めば、それらが呼び出されて動くという感じになる。
シーンクラスに衝突判定を簡単に処理する機能を追加(DXRubyExtensionの機能を使用)して、Actorには自動移動用の各種機能を作りこめば、結構簡単に作れそう&使えそうな感じになりそうだ。
しかしActorという名前はなんだか気に入らないのでSpriteにしようかとか思っている。
このへんのネーミングセンスの違いにも、設計思想の差が出ているような気がする。


DXRubyが使いやすいと感じてくれてる人も少しはいるみたいで、俺としては嬉しい限り。
俺にとって使いやすいものを作っているのだから、使いにくいと思う人も多いだろうが、DXRubyFramework(短縮名DXRubyFW。いま決めた)も同様に俺にとって使いやすいものにするつもりだから、使いにくいと思う人は自分で作ってください。
あんまり関係ないが、Easy3D for Win32のRubyラッパも、アレをそのままRubyから呼べるようにするだけじゃなくて、Rubyっぽく扱えるようなクラスライブラリ化できればいいんだろうなと思ったりする。
が、それも設計思想によるだろうから、そのまま呼べる&追加でクラスライブラリの提供みたいにするのがよいのかもしれない。
DXRuby大好きさんがいるとして、本格的3Dをそんな感じに扱いたいと思うのなら、ひょっとしたら俺がEasy3Dラッパを作るのを期待しちゃったりするかもしれないが、俺は3Dさっぱりさんなので期待しないでください。


閑話休題
最初の問題に戻ると、DXRubyFrameworkをDXRubyExtensionに含めるのかどうか。
名前を別に付けたところから察することもできるだろうが、やっぱり含めないことにする。
そして、これらのライブラリはDXRuby本体にも含めることは無い。
代わりに1.0.0となり次第、DXRubyのリリースパッケージに含めようと思う。
リファレンスマニュアルにも使い方をきちんと書いて、一緒にインストールはされるけど、使うときは別にrequireしてね、って感じだ。
これはさっき思いついたことだ。
どうすれば一番いいかというアイデアは、知識や経験として存在していなければそうそう簡単に思いつくものではない。
いま自分が知っている範囲で最良を選んだとしても、少し後になれば最良じゃなくなることがあるのだ。
だからこそ、経験が致命的に不足している俺は、時間をかけて少しずつ考えていかないといけない。
今後のDXRuby関連のアップデートはローペースになると思うが、そういうことなのでゆっくりしていってね