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.