33. ボスの弾幕2
このショットはこのようなショットです。最初のショットが32章のショット、2番目のショットが33章のショットです。
説明をしていると難しくなってしまうので、ここでは説明しません。
この章と次の章はわからなくても、全然これからの章に困りません。
こんな感じの弾幕も作れるよという参考程度にムービーを見てください。
弾幕は無限の種類が作れます。
ボスの弾幕は今までの知識から自分で作ってみましょう。
一応、プログラムコードを載せておきますので、どうしても見たい方はご覧ください。
void EnemyShotPattern13(int i){ if(EnemyShot[i].counter==0){ EnemyShot[i].Enx[0]=EnemyShot[i].mem_ex; EnemyShot[i].Eny[0]=EnemyShot[i].mem_ey; for(int j=0;j<6;j++){ EnemyShot[i].EnemyShots[j].x=EnemyShot[i].Enx[0]; EnemyShot[i].EnemyShots[j].y=EnemyShot[i].Eny[0]; EnemyShot[i].EnemyShots[j].flag=1; 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[0].angle+2.0f*PI*(double)j/6.0f; } PlaySoundMem(sound_enemy_shot[0],DX_PLAYTYPE_BACK); } if(EnemyShot[i].counter==80){ double ang[10]; EnemyShot[i].img=1; for(int s=0;s<10;s++){ ang[s]=EnemyShot[i].EnemyShots[s].disp_angle; EnemyShot[i].Enx[s]=EnemyShot[i].EnemyShots[s].x; EnemyShot[i].Eny[s]=EnemyShot[i].EnemyShots[s].y; } for(int s=0;s<6;s++){ for(int j=10*s;j<10*(s+1);j++){ EnemyShot[i].EnemyShots[j].flag=1; EnemyShot[i].EnemyShots[j].angle=ang[s]+2.0f*PI*(double)(j)/10.0f; } } PlaySoundMem(sound_enemy_shot[1],DX_PLAYTYPE_BACK); } if(EnemyShot[i].counter==160){ EnemyShot[i].img=2; for(int j=0;j<6*10;j++){ EnemyShot[i].EnemyShots[j].flag=1; EnemyShot[i].Enx[j]=EnemyShot[i].EnemyShots[j].x; EnemyShot[i].Eny[j]=EnemyShot[i].EnemyShots[j].y; EnemyShot[i].EnemyShots[j].speed=GetRand(100); EnemyShot[i].EnemyShots[j].angle=atan2(Player.y-EnemyShot[i].EnemyShots[j].y,Player.x-EnemyShot[i].EnemyShots[j].x); } PlaySoundMem(sound_enemy_shot[1],DX_PLAYTYPE_BACK); } double old_x[400],old_y[400]; if(EnemyShot[i].counter<80){ for(int j=0;j<6;j++){ old_x[j]=EnemyShot[i].EnemyShots[j].x; old_y[j]=EnemyShot[i].EnemyShots[j].y; EnemyShot[i].EnemyShots[j].angle += 2.0f*PI/500.0f; EnemyShot[i].EnemyShots[j].x=EnemyShot[i].Enx[0]+(double)EnemyShot[i].counter*1.5f*cos(EnemyShot[i].EnemyShots[j].angle); EnemyShot[i].EnemyShots[j].y=EnemyShot[i].Eny[0]+(double)EnemyShot[i].counter*1.5f*sin(EnemyShot[i].EnemyShots[j].angle); EnemyShot[i].EnemyShots[j].disp_angle=atan2(EnemyShot[i].EnemyShots[j].y-old_y[j],EnemyShot[i].EnemyShots[j].x-old_x[j]); } } else if(EnemyShot[i].counter<160){ for(int j=0;j<6*10;j++){ old_x[j]=EnemyShot[i].EnemyShots[j].x; old_y[j]=EnemyShot[i].EnemyShots[j].y; EnemyShot[i].EnemyShots[j].x=EnemyShot[i].Enx[j/10]+(double)((1.5f+(double)(j%2)/3.0f)*(EnemyShot[i].counter-80))*cos(EnemyShot[i].EnemyShots[j].angle); EnemyShot[i].EnemyShots[j].y=EnemyShot[i].Eny[j/10]+(double)((1.5f+(double)(j%2)/3.0f)*(EnemyShot[i].counter-80))*sin(EnemyShot[i].EnemyShots[j].angle); EnemyShot[i].EnemyShots[j].disp_angle=atan2(EnemyShot[i].EnemyShots[j].y-old_y[j],EnemyShot[i].EnemyShots[j].x-old_x[j]); } } else { for(int j=0;j<6*10;j++){ double s; s=(double)(50+EnemyShot[i].EnemyShots[j].speed)/100.0f; old_x[j]=EnemyShot[i].EnemyShots[j].x; old_y[j]=EnemyShot[i].EnemyShots[j].y; EnemyShot[i].EnemyShots[j].x=EnemyShot[i].Enx[j]+(double)(EnemyShot[i].counter-160)*s*cos(EnemyShot[i].EnemyShots[j].angle); EnemyShot[i].EnemyShots[j].y=EnemyShot[i].Eny[j]+(double)(EnemyShot[i].counter-160)*s*sin(EnemyShot[i].EnemyShots[j].angle); EnemyShot[i].EnemyShots[j].disp_angle=atan2(EnemyShot[i].EnemyShots[j].y-old_y[j],EnemyShot[i].EnemyShots[j].x-old_x[j]); } } }
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi
Yamada.