7でキャラクタ同士の当たり判定を行うことができた。しかし、当たり判定に使用する矩形は画像の矩形の大きさをそのまま使っているため、絵的には衝突していないのに矩形で衝突してしまうという現象が起こってしまう。
![]()
そこで、当たり判定用の矩形を画像の矩形よりも小さくとり、当たり判定用の矩形同士で当たり判定を行うテクニックを紹介する。
![]()
画像の矩形のうち、当たり判定に使う矩形を決め、変数に格納する。
![]()
[プログラム]
// グローバル変数 RECT MyCharRect; // マイキャラの矩形RECT MyCharHitRect; // マイキャラの当たり判定用矩形RECT TekiCharRect; // 敵キャラの矩形RECT TekiCharHitRect; // 敵キャラの当たり判定用矩形// 初期化用関数 void GameInit(void) { //---------------------------------------------------初期化 /* マイキャラ */ SetRect(&MyCharRect, 100, 100, 142, 142); // 画像の矩形SetRect(&MyCharHitRect, 4, 2, 38, 40); // 当たり判定の矩形/* 敵キャラ */ SetRect(&TekiCharRect, 100, 200, 142, 242); // 画像の矩形SetRect(&TekiCharHitRect, 2, 2, 40, 40); // 当たり判定の矩形・ ・ ・
キャラクタの表示座標と当たり判定用矩形を元に、キャラクタ同士の当たり判定を行う。
![]()
[プログラム]
/* マイキャラと敵キャラの当たり判定を行う */ // マイキャラの表示位置を求める SetRect( &Rect1, MyChar_x + MyCharHitRect.left, MyChar_y + MyCharHitRect.top, MyChar_x + MyCharHitRect.right, MyChar_y + MyCharHitRect.bottom); // 敵キャラの表示位置を求める SetRect( &Rect2, TekiChar_x + TekiCharHitRect.left, TekiChar_y + TekiCharHitRect.top, TekiChar_x + TekiCharHitRect.right, TekiChar_y + TekiCharHitRect.bottom); // 衝突した場合の処理 if (HitCheck(Rect1, Rect2)) { ・ ・ ・