無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
サンタクロース

無題

#1

投稿記事 by サンタクロース » 15年前

こんばんわ。今、風神録のにとりの「光り輝く水底のトラウマ」という弾幕を作っています。
sin波が左右から迫ってくるというものです。
今のところは左からのみを実装したのですが、どうも垂直方向の弾の変化がないのです

void boss_shot_bulletH011(){//「光り輝く水底のトラウマ」
#define TM011 400
int n,k,k2,cnt,state,t0=boss_shot.cnt%TM011;
float angle;
angle=0;

for(n=0;n<8;n++){
if(t0%10==0){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd =2;
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].angle =0;
boss_shot.bullet[k].flag =1;
boss_shot.bullet[k].x =0;
boss_shot.bullet[k].y =0;
boss_shot.bullet[k].x0 =0-n*15;
boss_shot.bullet[k].y0 =30+n*30;
boss_shot.bullet[k].col =6;
boss_shot.bullet[k].spd =0;
boss_shot.bullet[k].till =100;
boss_shot.bullet[k].state =1;
boss_shot.bullet[k].eff_detail=1;
}
se_flag[0]=1;
}
}

if(t0%10==0){//
for(n=0;n<8;n++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd =2;
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].angle =0;
boss_shot.bullet[k].flag =1;
boss_shot.bullet[k].x =0;
boss_shot.bullet[k].y =0;
boss_shot.bullet[k].x0 =0-n*15;
boss_shot.bullet[k].y0 =30+n*30;
boss_shot.bullet[k].col =6;
boss_shot.bullet[k].spd =0;
boss_shot.bullet[k].till =100;
boss_shot.bullet[k].state =-1;
boss_shot.bullet[k].eff_detail=1;
}
se_flag[0]=1;
}
}


for(k2=0;k2<BOSS_BULLET_MAX;k2++){
state=boss_shot.bullet[k2].state;

if(boss_shot.bullet[k2].flag>0){
boss_shot.bullet[k2].x=boss_shot.bullet[k2].x0+cosf(angle)*(boss_shot.bullet[k2].cnt*1.0)+cosf(angle+state*PI/2)*sinf(boss_shot.bullet[k2].cnt*0.02)*20;
boss_shot.bullet[k2].y=boss_shot.bullet[k2].y0+sinf(angle)*(boss_shot.bullet[k2].cnt*1.0)+sinf(angle+state*PI/2)*sinf(boss_shot.bullet[k2].cnt*0.02)*20;
}
}
}


画像

サンタクロース

Re:無題

#2

投稿記事 by サンタクロース » 15年前

ごめんなさい。とてもくだらないミスをしていたようです
boss_shot.bullet[k].state =-1が抜けていました。

Tatu

Re:無題

#3

投稿記事 by Tatu » 15年前

「光り輝く水底のトラウマ」をみて弾幕関数を作ってみました。

/*
弾発射関数
way個のknd番目の種類のcol番目の色の弾を座標(x,y)からb_angleの方向を中心に発射角度をそれぞれd_angleだけずらし、
(ただし、偶数弾などb_angleの方向に撃ちたくないときはb_angleの値をd_angle/2.0だけ大きくする)
angle方向に速度をspd,vxの値をvx,vyの値をvyに(vx,vyはそのままでは機能しない),
状態をstateにしてとばす。この弾はtillまで画面外に出ても消えず、
effが1ならば加算ブレンドして描画され、sflagが1ならば発射音がなる。
*/
void boss_bullet_on(int way,int knd,int col,int cnt,double x,double y,double b_angle,double d_angle,double spd,double vx,double vy,int state,int till,int eff=0,int sflag=1){
int i=0,k;
for(i=0;i<way;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].knd = knd;//弾の種類
if(knd==7) boss_shot.bullet[k].kaiten=1;
else boss_shot.bullet[k].kaiten=0;
boss_shot.bullet[k].col = col;//弾の色
boss_shot.bullet[k].cnt = cnt;
boss_shot.bullet[k].x = x;//座標
boss_shot.bullet[k].y = y;
boss_shot.bullet[k].angle = b_angle+d_angle*(i - way/2);//角度:bが基準、dが間隔
boss_shot.bullet[k].spd = spd;//angle方向のスピード
boss_shot.bullet[k].vx = vx;//x方向の速度
boss_shot.bullet[k].vy = vy;//y方向の速度
boss_shot.bullet[k].state = state;//弾の状態
boss_shot.bullet[k].till = till;//弾が画面外に出ても消えない時間
boss_shot.bullet[k].eff = eff;
if(sflag==1)se_flag[0]=1;
}
}
}

void boss_shot_bulletT125(){
int i,t=boss_shot.cnt%600;
double y=boss_shot.base_angle[0];//正弦波状に動く弾の発射位置調整用

if(t==0){
boss_shot.base_angle[0]=rang(15);
}

if(t>=60 && t<540 && t%20==0){
for(i=0;i<8;i++){
boss_bullet_on(1,1,1,0,-60*i,y+60*i,0,0,1,0,0,1,1200);
boss_bullet_on(1,1,1,0,FMX+15+60*i,y+30+60*i,PI,0,1,0,0,1,1200);
boss_bullet_on(1,1,1,0,-60*i,y+60*i,0,0,1,0,0,2,1200);
boss_bullet_on(1,1,1,0,FMX+15+60*i,y+30+60*i,PI,0,1,0,0,2,1200);
}
}

if(t==440){
move_boss_pos(64,64,FMX-64,150,FMX/3.0,60);
}
if(t>=500 && t%10==0){
boss_bullet_on(9,1,1,0,boss.x,boss.y,bossatan2(),PI/11,2,0,0,0,0);
}

for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet.flag==1){
switch(boss_shot.bullet.state){
case 1:
boss_shot.bullet.y+=PI2/13*sin(boss_shot.bullet.cnt*PI2/360.0);
break;
case 2:
boss_shot.bullet.y-=PI2/13*sin(boss_shot.bullet.cnt*PI2/360.0);
break;
}
}
}
}
画像

閉鎖

“C言語何でも質問掲示板” へ戻る