シューティングゲームの館

今日 昨日


30. 円&sin波混合ショット


このショットはこのようなショットです。



円形に広がりながらも、水平方向になみうって進みます。

マイカウントごとに計200個の弾をまいています。

毎回、発射する弾のフラグを上げ、今までどおり初期座標を代入。

角度は全方向ショットの時と同じく、敵とプレイヤーとの角度+0.2ずつ増やしています。

最後のループで、座標を計算しています。

ここで、XとYは違う計算のしかたをしています。

sin((double)EnemyShot[i].counter/40.0f)

によって、40カウントで1周期となるsin波が作れます。このsinは最大で1ピクセルと、ちょっと少ないので、

これに2をかけてやります。

この値をいつものように計算された座標にプラスすることで、水平方向にゆがんだ弾幕になります。

y方向には進み方をゆっくりにするために、0.7をかけてあります。

void EnemyShotPattern10(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].EnemyShots[j].angle = 
                                     atan2(EnemyShot[i].mem_py-EnemyShot[i].mem_ey,EnemyShot[i].mem_px-EnemyShot[i].mem_ex);
                        else 
                                EnemyShot[i].EnemyShots[j].angle = 
                                     EnemyShot[i].EnemyShots[j-1].angle+0.2f;
                        StopSoundMem(sound_enemy_shot[0]);
                        PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK);
                }
                EnemyShot[i].EnemyShots[j].x+=
                     PATTERN1SPEED*cos(EnemyShot[i].EnemyShots[j].angle)+sin((double)EnemyShot[i].counter/40.0f)*2.0f;
                EnemyShot[i].EnemyShots[j].y+=
                     PATTERN1SPEED*sin(EnemyShot[i].EnemyShots[j].angle)*0.7f;
        }
}

戻る                                  次へ
メニューへ戻る


トップページへ

DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi Yamada.