今回はキャラクタに当たり判定を実装してみます。
自キャラはアクションが多くてややこしいので、まずは単純な動きの敵キャラを作ります。敵01キャラクラスCEnemy01のMove()内にて、前回作ったHit()を呼び出します。呼び出す際、移動後の座標を引数に入れ、当たっていたら移動させません。
ちなみにこの敵01はスーパーマリオで言うところのクリボーと同じ動きをします。つまり地面を歩いて、何かにぶつかったら方向転換し、地面が無ければそのまま落っこちる動作です。
重力を実現するために、常に下向きに移動させています。そしてdirectionというメンバ変数に、移動方向(LEFTとかRIGHTという列挙型定数)を保持させて、それの通りに歩かせます。これで上記の動きをしてくれます。
ちなみに作業中の自キャラクラスでは、もう少しリアリティを出すために擬似的ですが重力加速度を導入しています。
次回はキャラクタの位置情報をファイルから読み込む処理をやります。
//-----------------------------------------------------------------------------
// 移動
void CEnemy01::Move()
{
int move;
RECT retRect;
// 重力
if (CharaManage->Hit(my_no, mx, my+4, &retRect)==-1) {
my+=4;
}
// 移動方向
move=-2;
if (direction==RIGHT) {
move=2;
}
if (CharaManage->Hit(my_no, mx+move, my, &retRect)==-1) {
// 当たってなければ移動
mx+=move;
}
else {
// 当たってたら反転
if (direction==RIGHT) {
direction=LEFT;
}
else {
direction=RIGHT;
}
}
}