DXRubyExtension機能拡張できた

なんか効果的なサンプルをつけてSourceForge.jpでリリースしたろか、と思った。
でも、DXRubyプロジェクトの中のパッケージにすると、これが何かを説明する場所がないし、そもそも別のものだ。
とはいえ別プロジェクトにするとそれはそれで管理が面倒だ。
やっぱりしばらくはコッソリWebに置くとしよう。
後で考える。
誰かいいアイデアがあったら教えて欲しい。


DXRubyExtensionの当たり判定は、配列に矩形、円、点の範囲オブジェクトを突っ込んで、配列同士を比較することができる。
どれを入れてもきちんと判定されるというところがミソで、当たり判定範囲をオブジェクトごとにバラバラの形で作っていい。
これを実現するために結構複雑&でかいコードになってしまったが、それでもRubyで単純な矩形同士の判定をやるだけよりずっと速いだろう。


そこそこ簡単なゲームを作るだけならこれでもいいが、もうちょいややこしいゲームを作ろうと思うと機能が足りない。
今後とりあえず必要になるのは、1つのキャラに複数の判定を持つ場合の対応と、回転した矩形の判定だろう。
複雑な形をしたキャラの場合、複数の判定オブジェクトを使いたいことがあると思うが、そういうときにはどれか一つ当たっただけで他の判定は省略したい。
難しい仕組みを作るかどうかで悩んでいたが、どうせ通知されるオブジェクトが判定オブジェクトを全部持ってるんだから、hitなりshotなりの中でそいつらのdelflagをONにすればいい。
それ用のメソッドを作ればいいか。
回転した矩形は大変だ。
辺の線分を右周りにして、点がその中にあるかどうかを判定することで点は判定できるが、矩形同士になると4点や中心点の判定では貫通した場合に判定できなくなる。
きちんと判定するためには、線分同士の判定をすべての辺で行う必要があるだろうか。
それから、どの辺も当たってなくても、どれかの点が中に含まれているかどうか。
円と線分ってどうやるんだろう・・・。
このあたりはあんまりやったことがないから、効率的なやりかたがわからないのだが、まあ、とりあえずは動けばいいって感じか。


逆に、簡単なゲームを作るならもっと簡単な判定も必要な気がする。
通知オブジェクトを指定してコールバックする仕組みは難しいし、用途によってはオーバースペックだ。
判定範囲オブジェクトを2つ渡して当たっているかどうかを判定する、簡素なメソッドも提供したいところだ。


これだけできれば大体の用途には間に合うだろう。
三角形や楕円があればもっと複雑な判定もできるようになるが、そこまで求める人は少ないと思う。
2Dのゲームでそんな形のものが大量に動くとかあんまり考えられないし、そこまで大量なら判定を手抜きするのが普通だし、少ないならRubyで書けばよい。
形が増えれば増えるほど作るのは大変なのだ。