当たり判定の仕様を悩む

少しずつ考えはまとまってきた。
が、回転した矩形をサポートするところで、その扱いをどうしたらいいのかで悩む。


DXRubyExtensionでサポートする当たり判定のデータの持ち方は、基本的にはDXRubyで描画する画像に対応させるようになっている。
画像のxとyの座標にたいして、それぞれ+いくつの座標範囲が当たりである判定する。
だから、あたり判定オブジェクトは原点のx、yと、そこを基点にする判定範囲を持つ。
円にも原点と判定の中心と半径があるような感じだ。
そうすることで、判定範囲は基本的には変わらないから、原点の位置をキャラの移動に合わせて設定しなおせばいいようになる。


回転するとなると話は別だ。
DXRubyで画像を回転させるといえば、普通は角度を指定して回転させる。
このとき、回転だけならいいが、拡大縮小が混ざったらサポートできないとなると、困ったことになる。
DXRubyでできること、すなわち回転拡大縮小、それから、それら変形の原点指定を、そのまま当たり判定範囲に適用できなければサポートする意味が無いのだ。
そうすれば、角度0の場合の判定範囲を矩形で指定するだけで、好きなように変形させた形に判定範囲がそのまま適用できる。


もう一つ欲を出すなら、円の判定オブジェクトにもそういうのがあるといい。
だが、これをやろうとすると回転した楕円の判定になって、極端に難しくなる。
やりかたは、楕円はスケール+回転だから、同じぶんだけ−回転−スケールを、判定対象のすべての頂点に対して行ってから、真円との判定をする。
でもこの手は両方が楕円だとできない。
かなりややこしいことになってしまう。
うーん、やっぱり変形した円はサポートしないことにしよう。
簡単にできるならいいんだけどねえ。


あとは、そういうイメージオブジェクトに対しての判定じゃない場合も想定範囲に入ってくる。
ずばり三角と線分だ。
自由な形を判定するなら三角だけあればどうにでもなるし、線分は俺の好みだ(?)。
このあたりになってくると、イメージオブジェクトにくっつけてどうこうってのは難しい話になるし、逆に使いにくくなりそうだから、そういう判定範囲をキャラに付けたい人は自分で頂点の計算をしてくれ、という感じで。


ほんとはフルサポートしたいのだが、作る手間と、それ以上に検証の手間がかかりすぎるのだ。