シューティングゲーム作成入門トップに戻るボスを作ろう4(ショットパターン追加3)今回はボスの最後のショットパターンについて説明します。上下にふわふわと移動しながら、一定間隔で放射状に弾を発射させ、その弾を徐々に風車みたいに回転させます。一定間隔でプレイヤーめがけて、ボスの左右2箇所から弾をクロスする感じで発射させます。コードは以下の通りです。if(num==1){shot[index].x=x+50;shot[index].rad=atan2(py-y,px-(x+50));}++num;if(num==2){//5発分打ち終わったら、60ループ(一秒間)停止if(temp_scount+20==scount){temp_scount+=60;}break;}s_shot=true;}}break;まず放射状に弾を発射させる方のコードですが、コチラは15ループに一回動作させるようにしています。今までのコードとほぼ一緒なので、ラジアンの計算の部分だけ説明します。式は以下のようになっています。shot[index].rad=((360/20)*PI/180)*num+((scount/15)*0.08);弾は20分割して放射状に発射させるので、まず360÷20で弾一つ分の角度を出し、それをラジアン単位に変換した後、弾数numをかけて、それぞれの弾の角度を出しています。今回は段々弾を風車のように回転させるので、初期の角度を少しずつ増加させる必要があります。15ループに一回計算が行われるので、scount/15の計算を行うと、15ループごとに、1,2,3と徐々に増えていく値が得られます。風車のような回転しながらのショットが撃てるようになります。この0.08という値は好みの値に変えて回転スピードを変えてみても構いません。この中のif文の処理は20発セットしたら終了するため、numが20になったらループを抜けるようにしています。弾をクロスさせる感じで撃つショットのコードです。この部分の処理のために、temp_scountという変数を新たに用意しています(コンストラクタで0に初期化してます)このif文の条件は、scountが5で割り切れ、かつscountがtemp_scount以上の時のみ処理するようにしています。イメージとしては、ボスの両側から二つ弾を発射し、それを5ループ間隔で打ち続けます。それを5回、合計20発発射したら、一定間隔を置いたあとまた発射し始めるという流れです。下記の部分のコードを見てください。二つ分の弾の座標と角度を設定してやる必要があります。numが0の時はx座標から50を引いた座標を代入してます。ラジアンの方も、x座標から50を引いた値で計算して、プレイヤー方向のラジアンを代入しています。numが1の時は、ボスの右側の弾の設定を行うので、逆に50を足した値でそれぞれ計算しています。これで弾のセットはできましたが、これを5回繰り返し、一定間隔を置く処理を書く必要があります。それが以下の部分のコードです。if(num==2){//5発分打ち終わったら、40ループ停止if(temp_scount+20==scount){temp_scount+=80;}break;}if分でnumが2の時に実行するようにしてます。2発目のセットが終わった後ですね。temp_scountとscountは最初の値は0です。5ループに一回弾のセットが行われるので、scountが20になった時が5ループ目ということになります。temp_scount+20とscoutの値が一致したときということです。この時にtemp_scountの値を60足してやります。temp_scount<=scount)に従い、scountがtemp_scount以上になるまでは弾が発射されないことになります。60カウント足す時点でtemp_scountとscountの差は20開いています。実際は40ループだけ弾の発射が停止されるということになります。このショットを実装することで、以下の動画のようなショットを撃つことが出来るようになります。今回の説明は以上です。次回は未定ですが、ボスとの当たり判定を実装しようと思っています。メニューレイアウト変更。ブラウザキャッシュのクリアをお願い致します。レイアウト変更に伴いブラウザキャッシュのクリアをお願いします。TOPページのデザインを変更。相互リンクページに、複数サイト追加。C言語学習ページ発展編(1~9章)追加。HTML/CSSリファレンスのページ追加。