ゲーム開発16:キャラクタ同士の当たり判定2

今回はキャラクタに当たり判定を実装してみます。

自キャラはアクションが多くてややこしいので、まずは単純な動きの敵キャラを作ります。敵01キャラクラスCEnemy01Move()内にて、前回作った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;
  }
 }
}

コメントを残す

メールアドレスが公開されることはありません。