


26. 螺旋ショット。
このショットはこのようなショットです。
弾は一度に最高200発まで出せますが、今回はその最大数を使用します。
これは毎カウントごとに発射しています。
このショットのアルゴリズムは、
毎回よばれるごとに、
・ 発射フラグをたてて
・ 敵の座標をショットの初期座標に代入します。
・ atan2関数をもちいて、プレイヤーと敵とのy、x座標からどの方向にいるかラジアンを求めます。
・ 前のラジアンより2.0ラジアン増やします。
・ 斜辺 * cosでx座標が、斜辺 * sinでy座標が求まります。斜辺はPATTERN1SPEEDでしたね。この値を座標に増やします。
・ いつものようにスピードを三角関数で求めます。
毎回2.0ラジアンほど増やしていくことで、徐々に弾が回転して発射されているように見えます。
この事をプログラムで書くとこうなります。
このアルゴリズムをプログラムでかくとこうなります。以前と同じ部分は注釈を書きません。
void EnemyShotPattern6(int i){
for(int j=0;j<200;j++){
if(EnemyShot[i].counter==j){
EnemyShot[i].EnemyShots[j].flag=1;
EnemyShot[i].EnemyShots[j].x=EnemyShot[i].mem_ex;
EnemyShot[i].EnemyShots[j].y=EnemyShot[i].mem_ey;
if(j==0)//最初だけ、プレイヤーの方向に角度をきめます。
EnemyShot[i].Angle[j] = atan2(EnemyShot[i].mem_py-EnemyShot[i].mem_ey,EnemyShot[i].mem_px-EnemyShot[i].mem_ex);
else //それいこうは2.0ラジアンずつ増やしていきます。
EnemyShot[i].Angle[j] = EnemyShot[i].Angle[j-1]+0.2f;
StopSoundMem(sound_enemy_shot[0]);
PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK);
}
EnemyShot[i].EnemyShots[j].x+=PATTERN1SPEED*cos(EnemyShot[i].Angle[j]);
EnemyShot[i].EnemyShots[j].y+=PATTERN1SPEED*sin(EnemyShot[i].Angle[j]);
}
}
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi
Yamada.