24. 時間差ショット。
このショットはこのようなショットです。
先に発射した弾はゆっくり、後に発射した弾は早く飛んできます。
このショットは、角度固定で、弾の飛ぶ早さを変えています。
どのショットも基本は同じで、ほとんどおなじことをしています。
実行したときに聞こえると思いますが、これは全部等間隔で発射しています。。
これは10カウントごとに発射しています。
このショットのアルゴリズムは、
カウントが10の倍数になった時、
・ 発射フラグをたてて
・ 敵の座標をショットの初期座標に代入します。
・ atan2関数をもちいて、プレイヤーと敵とのy、x座標からどの方向にいるかラジアンを求めます。
・ 斜辺 * cosでx座標が、斜辺 * sinでy座標が求まります。斜辺はPATTERN1SPEEDでしたね。この値を座標に増やします。
・ 最後、増加させるx、yの値が決まった後、先に発射した弾は遅く、後に発射した弾は早くさせるため、
それぞれの値を増減させます。
この事をプログラムで書くとこうなります。
このアルゴリズムをプログラムでかくとこうなります。以前と同じ部分は注釈を書きません。
void EnemyShotPattern4(int i){ for(int j=0;j<10;j++){//10ショットうつ if(EnemyShot[i].counter==10*j){//10カウントごとに EnemyShot[i].EnemyShots[j].flag=1; EnemyShot[i].EnemyShots[j].x=EnemyShot[i].mem_ex; EnemyShot[i].EnemyShots[j].y=EnemyShot[i].mem_ey; EnemyShot[i].Angle[j] = 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); } //先に撃った弾はjがすくないもの、後に撃った弾はjが多いものです。jは10までありますから、 //これを用いて増減させています。 EnemyShot[i].EnemyShots[j].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[j])*(double)(0.8+0.4*j); EnemyShot[i].EnemyShots[j].y+=PATTERN1SPEED*sin(EnemyShot[i].Angle[j])*(double)(0.8+0.4*j); } }
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi
Yamada.