傾いた矩形の当たり判定

 ベクトルの内積を使うと傾いた矩形の当たり判定もできるそうです(しかも矩形に限らず何角形でもいい)。しかしちょっと難しそうです。ここでは、もっと単純明快な方法を書きたいと思います。

傾いた矩形の当たり判定

 1.傾いた矩形と点との当たり判定

 真ん中1ドットしか当たり判定がない自機が、傾いた壁や回転している敵と当たっているかどうか調べる、といった用途に使えると思います。

 回転する前の矩形Aの左上隅の座標を(x1,y1)、中心座標を(cx1,cy1)とします。これを角度rだけ回転させた矩形をBとします。Bと点cとの当たり判定について考えます。これは、点cを反対方向に角度rだけ回転させた架空の点dと矩形Aとの当たり判定を行うのと同じことです。点cの座標を(x2,y2)、点dの座標を(tx2,ty2)とします。

傾いた矩形

 次にtx2、ty2の求め方です。

 x1<=tx2かつtx2<=x1+w-1かつy1<=ty2かつty2<=y1+h-1の時当たりとなります。

 2.矩形同士の当たり判定

 自機の場合は真ん中1ドットにしか当たり判定がなくても構わないのですが、自機の弾とかだとそれではちょっと不正確ですね。そこで次は矩形同士の当たり判定について考えます。

矩形と矩形の当たり判定

 この方法は、結局弾を敵と同じ角度だけ傾いた矩形に近似しているということです。ですから、用途によっては不十分に感じられるかと思います。
傾いた矩形


[サンプルプログラムをダウンロード] (HSP Ver2.61+hspext.dll+hmm.dll用)
[サンプルプログラムをダウンロード] (HSP Ver3用)
 マウスで自機を動かし、左クリックで弾を撃ちます。自機と敵は点と矩形の当たり判定を、弾と敵は矩形同士の当たり判定を行います。

[目次へ][前へ][次へ] inserted by FC2 system