弾を残像させる方法2
Posted: 2009年12月17日(木) 22:46
先日のスレが過去ログに入ってしまったので、改めて質問させていただきます。
softyaさん遅れてしまいすみません;
>弾を生成する場所
これはshot.cppのshot_main()関数で良いのでしょうか?
softyaさん遅れてしまいすみません;
>弾を生成する場所
これはshot.cppのshot_main()関数で良いのでしょうか?
if(boss_shot.bullet[j].eff_detail==2){
for(int b=9; b>0; b--){
double blend = 0.8;
SetDrawBlendMode(DX_BLENDMODE_ALPHA,blend);
DrawRotaGraphF(
boss_shot.bullet[j].bx+FX+dn.x , boss_shot.bullet[j].by+FY+dn.y , 1.3 , disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
blend-=0.07;
}
}
if(boss_shot.bullet[j].eff_detail==2){
for(int b=0; b>10; b++){
double blend = 0;
SetDrawBlendModeDX_BLENDMODE_ALPHA,blend);
DrawRotaGraphF(
boss_shot.bullet[j].bx+FX+dn.x , boss_shot.bullet[j].by+FY+dn.y , 1.3 ,boss_shot.bullet[j].bangle ,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
SetDrawBlendMode(DX_BLENDMODE_NOBLEND,0);
blend+=0.07;
}
}// bullet_way(発射座標 X, 発射座標 Y, 分割(n道弾), ベース角度, 分割角度幅, 速度, 種類, 色, 状態,きらきら);
int bullet_way(double x, double y, int way, double angle, double angle2, double spd, int knd, int col, int state , int brt){
int k,i;
for(i=0;i<way;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].x = x;
boss_shot.bullet[k].y = y;
boss_shot.bullet[k].angle = angle-angle2*(way/2)+angle2*i;
boss_shot.bullet[k].knd = knd;
boss_shot.bullet[k].spd = spd;
boss_shot.bullet[k].col = col;
boss_shot.bullet[k].state = state;
boss_shot.bullet[k].eff_detail = brt;
}
}
for(int b=0; b<10; b++){//←ココ
boss_shot.bullet[k].bx = -50;
boss_shot.bullet[k].by = -50;
boss_shot.bullet[k].bangle = 0;
}
se_flag[0]=1;
return k;
}void boss_shot_calc(){
int i;
boss.endtime--;
if(boss.endtime<0)
boss.hp=0;
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet.flag>0){
boss_shot.bullet.x+=cos(boss_shot.bullet.angle)*boss_shot.bullet.spd;
boss_shot.bullet.y+=sin(boss_shot.bullet.angle)*boss_shot.bullet.spd;
boss_shot.bullet.cnt++;
if(boss_shot.bullet.flag!=0){//←ここから
if(boss_shot.bullet.eff_detail==2){
for(int b=9; b>0; b--){
boss_shot.bullet[i].bangle=boss_shot.bullet[i].bangle[b-1];
boss_shot.bullet[i].bx=boss_shot.bullet[i].bx[b-1];
boss_shot.bullet[i].by=boss_shot.bullet[i].by[b-1];
boss_shot.bullet[i].bangle[0]=boss_shot.bullet[i].angle;
boss_shot.bullet[i].bx[0]=boss_shot.bullet[i].x;
boss_shot.bullet[i].by[0]=boss_shot.bullet[i].y;
}
}//←ここまで
}
if(boss_shot.bullet[i].cnt>boss_shot.bullet[i].till){
if(boss_shot.bullet[i].x<-150 || boss_shot.bullet[i].x>FMX+150 ||
boss_shot.bullet[i].y<-150 || boss_shot.bullet[i].y>FMY+150)
boss_shot.bullet[i].flag=0;
}
}
}
}//弾丸の描画
void graph_bullet(){
int i,j,eff;
double disp_angle;
SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
for(i=0;i<SHOT_MAX;i++){//敵の弾幕数分ループ
if(shot[i].flag>0){//弾幕データがオンなら
for(j=0;j<SHOT_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
if(shot[i].bullet[j].flag!=0){//弾データがオンなら
if(shot[i].bullet[j].eff==1)
SetDrawBlendMode( DX_BLENDMODE_ADD, 255) ;
if(bullet_info[shot[i].bullet[j].knd].kaiten==1)
disp_angle=PI2*(shot[i].bullet[j].cnt%120)/120;
else
disp_angle=shot[i].bullet[j].angle+PI/2;
DrawRotaGraphF(
shot[i].bullet[j].x+FX+dn.x, shot[i].bullet[j].y+FY+dn.y,
1.0, disp_angle,
img_bullet[shot[i].bullet[j].knd][shot[i].bullet[j].co[/url],TRUE);
if(shot[i].bullet[j].eff==1)
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
}
}
}
}
void boss_assist_img();
//ボス
if(boss_shot.flag>0){//弾幕データがオンなら
for(j=0;j<BOSS_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
if(boss_shot.bullet[j].flag!=0){//弾データがオンなら
eff=0;
if(boss_shot.bullet[j].kaiten==1)
disp_angle=PI2*(boss_shot.bullet[j].cnt%120)/120;
else
disp_angle=boss_shot.bullet[j].angle+PI/2;
if(boss_shot.bullet[j].eff_detail==1){//風雨にも負けず用弾エフェクト
SetDrawBlendMode( DX_BLENDMODE_ADD, 100+GetRand(155)),eff=1 ;
DrawRotaGraphF(
boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
1.3, disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
}
if(boss_shot.bullet[j].eff_detail==2){//残像
for(int b=0 ; b<10; b++){
double blend =0;
SetDrawBlendMode( DX_BLENDMODE_ALPHA, blend);
DrawRotaGraphF(
boss_shot.bullet[j].bx+FX+dn.x, boss_shot.bullet[j].by+FY+dn.y,
1.3,boss_shot.bullet[j].bangle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0);
blend+=0.07;
}
}
if(boss_shot.bullet[j].eff==1)
SetDrawBlendMode( DX_BLENDMODE_ADD, 255),eff=1 ;
if(boss_shot.bullet[j].eff==2)
SetDrawBlendMode( DX_BLENDMODE_ADD, 255+GetRand(100)),eff=1 ;
DrawRotaGraphF(
boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
1.0, disp_angle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
if(eff==1)
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
}
}
//アシスト
・・・字数の都合上省略させていただきます。・・・
}
SetDrawMode(DX_DRAWMODE_NEAREST);//描画形式を戻す
}
if(boss_shot.bullet[j].eff_detail==2){//残像
for(int b=0 ; b<10; b++){
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 225-b*30);
DrawRotaGraphF(
boss_shot.bullet[j].bx+FX+dn.x, boss_shot.bullet[j].by+FY+dn.y,
1.3,boss_shot.bullet[j].bangle,
img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0);
}
}for(int b=0 ; b<10; b++){
SetDrawBlendMode( DX_BLENDMODE_ALPHA, 225-b*30);
DrawRotaGraphF(
225-b*30は0~255以内でないといけないと思うんですが。if(boss_shot.bullet[j].eff==1)
SetDrawBlendMode( DX_BLENDMODE_ADD, 255),eff=1 ;
if(boss_shot.bullet[j].eff==2)
SetDrawBlendMode( DX_BLENDMODE_ADD, 255+GetRand(100)),eff=1 ;
DrawRotaGraphF(
boss_shot.bullet[j].x+FX+dn.x, boss_shot.bullet[j].y+FY+dn.y,
1.0, disp_angle,img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].co[/url],TRUE);
if(eff==1)
SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
のところで、