今回のコードは、
「第9回 キー入力によって弾を発射」
を少し改良し、ランダムに弾を作成し、自機の方向へ飛ばすようにします。弾の移動等、詳しい事は第9回を参照して下さい。
今回は、ついでに弾をアニメーションさせる事にするので、_bullet構造体にanimationという変数を
追加しておきます。
では、メインループを見てみます。
第9回と見た目が同じですが、Shoot()とMoveBullet()、Show()の中身を変更しています。(他は全部同じ)
ここでは、1/100の確立で適当な位置を出し、自機への角度を取得して、弾を作成しています。
rand()という関数は0〜RAND_MAXまでの乱数を返してくれるので、適当な値pで割った余りを出せば、
0からpのランダム値が出せます。
で、GetAngle(int mx,int my,int sx,int sy);関数は自作関数で、mx,myからsx,syまでの角度を算出します。
GetAngle(x+8,y+8,(int)player.x+16,(int)player.y+16);のx+8,y+8というように、ある値を足していますが、
自機などの座標は、画像の左端を表わしているため、画像の中心を表わすためには、画像サイズの半分の値を
足せばいいですよね?
この自作関数は上の方で説明したので解りますね(^^;
で、弾をアニメーションさせるためには、弾移動中にanimationの値をどんどん増やしていきます。
今回使用する画像は

です。弾のアニメーションは12パターンありますよね?
ですから、animationの値は0〜11の間を繰り返し変化するようにプログラムしてやります。
で、後は、このanimationの値をうまく画像に照らし合わせて画面に表示してやればいいわけです。
1つの弾の画像サイズが16×16で左にスライムが32ドットあるので、弾画像のx座標は32+16×アニメーションという事になりますよね?
まぁ、このアニメーションは、繰り返し行われる弾やら敵に限りますね。自機のようなキー入力によって
画像を変えたいときには使えませんね。
ってアニメーションくらいならいちいち説明しなくても解りますね(^^;簡単だし。