衝突判定など

DXRuby1.3系ではSpriteを実装しはじめているが、DXRubyFwレベルの複雑な機能を統合しようとは思ってなくて、でも単純に簡易版にしようとも思っていない。
DXRubyFwのSpriteができる限りの高速化を狙っていたのに対し、本体統合版のSpriteはゲームを作りやすくすることを目指す。
具体的には、複雑極まりないコマンドによる自動移動の削除、RenderTarget/Shaderへの対応、アニメーション仕様の練り直し、そして、衝突判定仕様の充実、となる。

今回の話題は衝突判定。
DXRubyでの高速衝突判定はDXRubyExが担っているが、やはりちょっと使いにくい。原因は処理コストをできるだけ減らそうという前時代的方針だ。遅いCPU&Ruby1.8で弾幕ゲーを作るにはそのような努力が必要だったのだ。いまの時代にはふさわしくない。
とはいえ、DXRubyExは長いこと同梱してあるのでいまさら大幅な仕様変更もしづらい。使わないと普通に遅いし、三角や円を混在させた複雑な衝突判定をRubyで書いたら大変。という感じで、現状選択肢が無い。
また、DXRubyFwのSpriteは矩形のみの簡易衝突判定は持っているが、DXRubyExと同時に使おうと思ってもこれがなかなか難しい。特に、画像の回転に合わせて判定範囲を回転させようなどと思うと死ぬほど苦労する。

現在検討しているのが、DXRubyEx以上の衝突判定処理を本体統合版Spriteに持たせる、というネタだ。
DXRubyExと同様に点、円、矩形、三角形の判定範囲を使えて、更にSpriteオブジェクトのscale指定やangle指定に合わせて範囲を調整する機能も持つ。
これができたらサンプルのLaser.rbなどがとても簡単になるだろう。現状、あの程度のものを作るのにも苦労する状況がよろしくないのだ。レーザー1本を描画から判定までSpriteオブジェクト1個で処理できればどれだけラクなことか。

まあ、作るのは少し大変で時間はかかると思うが、そこいらへんの作りこめばいろいろ面倒なことを減らしてくれるのではないかと思う。