22. 連続直線ショット。
このショットはこのようなショットです。
最初だけ、自分の方に向かって連続で、飛んできます。
このショットは、途中で移動しても、とんでくる弾の角度は変わりません。
写真を見ると、等間隔で弾があいています。
これは20カウントごとに発射しているのでこのようになっています。
カウントが20の倍数になった時、
・ 発射フラグをたてて
・ 敵の座標をショットの初期座標に代入します。
・ atan2関数をもちいて、プレイヤーと敵とのy、x座標からどの方向にいるかラジアンを求めます。EnemyShot[i].Angle[0]に格納します。※1
・ 斜辺 * cosでx座標が、斜辺 * sinでy座標が求まります。斜辺はPATTERN1SPEEDでしたね。この値を座標に増やします。
この事をプログラムで書くとこうなります。
※1:角度は一定で飛んでいくので、角度を代入するのは[0]だけで結構です。無駄に同じ値が何度もこの変数に代入されてますが、
処理を簡略化するために条件文を減らしました。
void EnemyShotPattern2(int i){ for(int j=0;j<10;j++){//計10発撃つ if(EnemyShot[i].counter==20*j){//20カウントに1回ずつ発射。 EnemyShot[i].EnemyShots[j].flag=1;//発射フラグをたてる EnemyShot[i].EnemyShots[j].x=EnemyShot[i].mem_ex;//弾の初期座標に敵の座標を代入 EnemyShot[i].EnemyShots[j].y=EnemyShot[i].mem_ey;//y同様 //敵とプレイヤーとの角度を計算 EnemyShot[i].Angle[0] = atan2(EnemyShot[i].mem_py-EnemyShot[i].mem_ey,EnemyShot[i].mem_px-EnemyShot[i].mem_ex); StopSoundMem(sound_enemy_shot[0]);//前の音がかぶさらないようにショットの音を消し PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK);//ショット音を流す } EnemyShot[i].EnemyShots[j].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[0]);//x座標の増加 EnemyShot[i].EnemyShots[j].y+=PATTERN1SPEED*sin(EnemyShot[i].Angle[0]);//y座標の増加 } }
このショットはこのEnemyShotPattern2関数で実現しています。
for(int j=0;j<10;j++){//計10発撃つ
このループを増やせば沢山の弾が出ます。
if(EnemyShot[i].counter==20*j){//20カウントに1回ずつ発射。
この間隔をひろげれば、弾の間の距離もひろがります。
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi Yamada.