


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.