弾幕名:ケロちゃん風雨に負けず
作製難易度:★★★ (3/10)

実行結果



第四回弾幕作製講座は「ケロちゃん風雨に負けず」です。

まず、この弾幕をよく見てみると、上に向かって8way弾が撃たれています。

その8way弾を徐々に下向きに加速していけばよさそうです。

8way弾の中心はPI/6の振れ幅で左右に振ってやります。

変化を美しく見せるには、sinを使います。sinは0→1→0→-1→0という繰り返しを美しく作ってくれれるので

これを使ってみましょう。

angle=PI*1.5+PI/6*sin(PI2/tm*t2);

tmを基準にして、増えていくカウンタt2で角度を変化させていきます。

角度の中心は真上なので、PI*1.5としています。

振れ幅はPI/6です。これに-1から1までの値がかかるので、

PI*1.5-PI/6〜PI*1.5+PI/6の値で変化していくことになります。

これを中心に8way弾を撃てばいいですね。

今回、angleで移動させると面倒なので、x方向の速度とy方向の速度で移動させてやります。

なので、spdは使いません。

vxは水平方向の速度、vyは鉛直方向の速度です。

この計算は関数の下で行っています。

なお、このままでは表示する画像角度が不定の為、

表示させる画像の角度を決める為に、vxとvyからatan2で計算して求めてやります。


---- boss_shotH.cpp に以下を追加 ----

void boss_shot_bulletH004(){
#define TM004 200
    int i,j,k,n,t=boss_shot.cnt%TM004,t2=boss_shot.cnt;
    static int tm;
    double angle;
    //周期の最初にtmをセット
    if(t==0)
        tm=190+rang(30);
    angle=PI*1.5+PI/6*sin(PI2/tm*t2);
    //4カウントに1回上に8way弾を撃つ
    if(t2%4==0){
        for(n=0;n<8;n++){
            if((k=search_boss_shot())!=-1){
                boss_shot.bullet[k].flag=1;
                boss_shot.bullet[k].state=0;
                boss_shot.bullet[k].cnt=0;
                boss_shot.bullet[k].knd=4;
                boss_shot.bullet[k].col=0;
                boss_shot.bullet[k].angle=0;
                boss_shot.bullet[k].eff_detail=1;
                boss_shot.bullet[k].x=boss.x;
                boss_shot.bullet[k].y=boss.y;
                boss_shot.bullet[k].vx = cos(angle-PI/8*4+PI/8*n+PI/16)*3;
                boss_shot.bullet[k].vy = sin(angle-PI/8*4+PI/8*n+PI/16)*3;
            }
        }
        se_flag[0]=1;
    }
    if(t%1==0 && t2>80){
        int num=1;
        if(t%2)
            num=2;
        for(n=0;n<num;n++){
            if((k=search_boss_shot())!=-1){
                angle=PI*1.5-PI/2+PI/12*(t2%13)+rang(PI/15);
                boss_shot.bullet[k].flag=1;
                boss_shot.bullet[k].state=1;
                boss_shot.bullet[k].cnt=0;
                boss_shot.bullet[k].knd=8;
                boss_shot.bullet[k].eff_detail=0;
                boss_shot.bullet[k].col=4;
                boss_shot.bullet[k].angle=0;
                boss_shot.bullet[k].x=boss.x;
                boss_shot.bullet[k].y=boss.y;
                boss_shot.bullet[k].vx = cos(angle)*1.4*1.2;
                boss_shot.bullet[k].vy = sin(angle)*1.4;
            }
        }
        se_flag[7]=1;
    }
    for(i=0;i<BOSS_BULLET_MAX;i++){
        if(boss_shot.bullet[i].flag>0){
            if(boss_shot.bullet[i].state==0){
                if(boss_shot.bullet[i].cnt<150)
                    boss_shot.bullet[i].vy+=0.03;
                boss_shot.bullet[i].x+=boss_shot.bullet[i].vx;
                boss_shot.bullet[i].y+=boss_shot.bullet[i].vy;
            }
            if(boss_shot.bullet[i].state==1){
                if(boss_shot.bullet[i].cnt<160)
                    boss_shot.bullet[i].vy+=0.03;
                boss_shot.bullet[i].x+=boss_shot.bullet[i].vx;
                boss_shot.bullet[i].y+=boss_shot.bullet[i].vy;
                boss_shot.bullet[i].angle=atan2(boss_shot.bullet[i].vy,boss_shot.bullet[i].vx);
            }
        }
    }
}


変更されているfunc.hも確認しておいて下さい。




- Remical Soft -