ルーミアのナイトバードの再現について

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

ルーミアのナイトバードの再現について

#1

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

こんにちわ。原作の弾幕を実装しようとしている者です。
「ナイトバード」を作ってみたのですが、どうも弾のスピードをうまく決めることができません。
本家ではPI/2(下向き)の方向の弾が遅く、そこから右または左に行くほど弾速が速くなり完全な円でない曲線ができますよね。そういった弾速の違いからできる曲線はどうすれば作ることができるでしょうか?
//「ナイトバード」
void boss_shot_bulletH008(){
#define TM008 50
    int i,n,k,t=boss_shot.cnt%TM008;
    float rand1,rand2;
    if(t==0){
        for(n=1;n<5;n++){//左
            rand1=rang(PI/12);    
            for(i=1;i<15;i++){
                    if((k=search_boss_shot())!=-1){
                    boss_shot.bullet[k].knd      =2;
                    boss_shot.bullet[k].angle    =PI/3+PI*2/3*i/15+rand1;
                    boss_shot.bullet[k].flag     =1;
                    boss_shot.bullet[k].x        =boss.x+cosf(PI/3+PI*2/3*i/15+rand1)*10;
                    boss_shot.bullet[k].y        =boss.y+sinf(PI/3+PI*2/3*i/15+rand1)*10;
                    boss_shot.bullet[k].col      =13;
                    boss_shot.bullet[k].cnt      =0;
                    boss_shot.bullet[k].spd      =??;    
                    se_flag[0]=1;
                 }
            }
        }
    }
    if(t==40){
        for(n=1;n<5;n++){//右    
            rand2=rang(PI/12);
            for(i=1;i<15;i++){
                if((k=search_boss_shot())!=-1){
                    boss_shot.bullet[k].knd      =2;
                    boss_shot.bullet[k].angle    =PI*2/3-PI*2/3*i/15+rand2;
                    boss_shot.bullet[k].flag     =1;
                    boss_shot.bullet[k].x        =boss.x+cosf(PI*2/3-PI*2/3*i/15+rand2)*10;
                    boss_shot.bullet[k].y        =boss.y+sinf(PI*2/3-PI*2/3*i/15+rand2)*10;
                    boss_shot.bullet[k].col      =11;
                    boss_shot.bullet[k].cnt      =0;
                    boss_shot.bullet[k].spd      =??;    
                    se_flag[0]=1;
                }
            }
        }
    }
}
画像

ひよこ

Re:ルーミアのナイトバードの再現について

#2

投稿記事 by ひよこ » 15年前

iを使っているので、0.3+i/15みたいな感じでいいのでは、ないでしょうか

サンタクロース

Re:ルーミアのナイトバードの再現について

#3

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

回答ありがとうございます。
しかしnを使わないと弾幕が三重の状態になってしまうのです。
iとnの両方を使わなければならないみたいです

ひよこ

Re:ルーミアのナイトバードの再現について

#4

投稿記事 by ひよこ » 15年前

1.3+n/5+i/5
ではこんな感じでよろしいのでしょうか?

Tatu

Re:ルーミアのナイトバードの再現について

#5

投稿記事 by Tatu » 15年前

boss_shot.bullet[k].spd=(0.1*i+1)*(1.0+0.5*n);
のような形ではどうでしょうか?


添付画像の弾幕の関数
/*
弾発射関数
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_bulletT124(){
int i,j,t=boss_shot.cnt%300;
double angle;
if( t==60 || t==120 || t==180 || t==240 ){
for(i=0;i<3;i++){
for(j=0;j<12;j++){
angle=bossatan2()-PI/4;
boss_bullet_on(1,1,1,0,boss.x,boss.y,angle+j*PI/16.0,0,(0.1*j+1)*(1.0+0.5*i),0,0,0,0);
}
}
}
if( t==90 || t==150 || t==210 || t==270 ){
for(i=0;i<3;i++){
for(j=0;j<12;j++){
angle=bossatan2()+PI/4;
boss_bullet_on(1,1,3,0,boss.x,boss.y,angle-j*PI/16.0,0,(0.1*j+1)*(1.0+0.5*i),0,0,0,0);
}
}
}
if(t==299){
move_boss_pos(48,48,FMX-48,160,150,180);
}
}

ひよこ

Re:ルーミアのナイトバードの再現について

#6

投稿記事 by ひよこ » 15年前

Tatuさんすごいです。よく出来てますね。今考えたものなんですか?
弾幕の数がすごいことになってます。125個も作ったなんて(私はきっと50もありませんよ。

サンタクロース

Re:ルーミアのナイトバードの再現について

#7

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

ひよこさん、Tatuさんありがとうございます。
まさかiとnをかけるという発想はまったくありませんでした。
おかげでいい感じの曲線ができました。
というかこれくらい自分で作れなければオリジナルの弾幕なんて到底作れませんね。

Tatu

Re:ルーミアのナイトバードの再現について

#8

投稿記事 by Tatu » 15年前

>>ひよこ さん
このスレッドを見て、「ナイトバード」の動画を見ながらつくりました。

>>サンタクロース さん
慣れれば作れるようになると思いますよ。

閉鎖

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