DXRubyWSサンプル

このあいだから作っているDXRubyWSにサンプルを追加しているのだが。
https://github.com/mirichi/DXRubyWS

まあ、ゲームに組み込むユーザーインターフェイスを作ることは確かにできた。でもコードを見るとわかるがベタに書いたほうが短くなるんじゃないかという感じで地味に大変だった。

この手のツールキットでは、コントロール類をクラスとして作ってあって、それを生成→登録という手順で画面を作る。生成か登録のどっちかのタイミングで位置とサイズを指定する必要があって、この指定の手法として、別アプリのデザイナを使うか、オートレイアウト機能を使うか、もしくは手で数値を書いて実行して確認するか、の3択となる。現状のDXRubyWSは手動だ。
いつかデザイナを作ってみたいとは思うのだが、基本的に見た目固定のコントロールを使うものではなく、ユーザーが自分でコントロールを作る(じゃないとゲームに使えない)というのを前提に考えているから、ユーザーが作ったコントロールをデザイナで使う必要があって、これがなかなか難しい。
オートレイアウトは作ることはできそうだが、個人的にそんなに魅力を感じない。そもそもオートレイアウトは画面を細かく区切って、その区切りの配置とともに中にどのように配置するかを柔軟に指定できてこそ、それなりの画面をそれで作ることができるわけで、現状のDXRubyWSではそれをするのが難しい。WSContainerをレイアウトのために量産するハメになってしまって、使いにくいこと甚だしい。のじゃないかと思う。まあ、このへんはごちゃごちゃ言うよりいっぺんやってみるのがよいのだろう。

ここんところゴソゴソとこのへんを作っていて思っていることなのだが、たとえばQtとかGTKとかのRubyバインディングも基本的には似たような使い方になっていて、その考え方は他の言語用のバインディングでも同様となっている。もっとRubyならではの豪快な設計があってもいいんじゃないか。まあ、Ruby専用でなければRubyだけ変な仕様にするわけにもいかんだろうから、そういったものは公式には出てこないのだろうけども、ラッパライブラリで変なのとかあってもよさそうだ。DSLとかそんなレベルじゃなく。
んでもそういったツールキット類はコントロール(ウィジェット?)の実装がCなりC++なりでされているから、いうほど踏み込んでどうこうすることはできない。DXRubyWSは描画やユーザーの入力以外はすべてRubyで書いちゃってるわけで、そのへんのツールキットには真似のできないような部分まで踏み込むことができるはずで、後はヒラメキの問題である。
とりあえず作ってみる経験がないとすべては机上の空論になってしまうわけで、たぶんもうちょっと色々作ってみたり、この関係でDXRuby本体に手を加えてみたりすることになるだろうと思っているのだが、いずれは今のDXRubyWSの実装をすべて捨てることになる可能性はある。
突破口はメタプログラミングかな、とか。