作成中のボス弾幕の不具合について

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

作成中のボス弾幕の不具合について

#1

投稿記事 by yrao » 15年前

お世話になってます。
 
 
現在ボス弾幕を作っている最中なのですが、思い通りに動いてくれない弾幕があり困っています。

その弾幕(2つあります)のソースとどこが思い通りに動いてくれないのかを、以下に載せておきます。

また、弾幕作成には、支館様の弾幕簡略化関数を使用しているのですが、新しい引数を最後に加えています。
これは、boss_shot.bullet.eff_detailです。

年末年始でいそがしい所申し訳ないのですが、不具合の原因が分かる方がいましたら、アドバイスよろしくお願いします。


 
 
・一つ目
 
void boss_shot_bulletH017(){
     int i,k,t = boss_shot.cnt; 
  double LX=FMX/2-boss.x+FMX/2;
 
  
      if(t>20&&t%200==100){
    move_boss_pos(40,90,FMX-40,110,80, 100);
 }
  
  
      if(t>140 && t%2 ==0)
            bullet_way(boss.x,boss.y,2 ,(0.03+rang(0.002))*t,PI   ,3,4,4,0,0);//←この弾幕です
      if(t>100 && t%15==0)
            bullet_way(boss.x,boss.y,25,PI2/25+PI2/50       ,PI2/25,5,8,0,1,0);

 for(i=0 ; i < BOSS_BULLET_MAX; i++){
   if(boss_shot.bullet.flag>0){
    if(boss_shot.bullet.state==1){
    if(boss_shot.bullet.cnt>=0 && boss_shot.bullet.cnt<21){
     boss_shot.bullet.spd-=0.15;
     }
    }
    }
   }


}


少しばらけ気味の2way弾を撃たせようと思い、角度を
(0.03+rang(0.002))*t
と設定したのですが、これがどうもいけないらしく、徐々にばらけ方が大きくなり、最終的にはばらまき弾
になってしまいます。
どのように角度を設定してやれば、一定のばらけ方のまま2way弾を撃たせられるのでしょうか。




・二つ目
 
void boss_shot_bulletH024(){
 int i,k,t=boss_shot.cnt;
 
 if(t%200==100)input_phy_pos(ch.x,40+rang(30),60);
 if(t%200==160)bullet_way(boss.x,boss.y,1,PI/2,0,2,4,3,0,1);
 

 

     for(i=0 ; i < BOSS_BULLET_MAX; i++){
     if(boss_shot.bullet.flag>0){
  
     if(boss_shot.bullet.state==0){
      boss_shot.bullet.eff_detail2=1;//前スレで質問させていただいた弾の残像エフェクトです。
              if(t%200==180){
         bullet_way(boss_shot.bullet.x,boss_shot.bullet.y,35,bossatan2(),PI2/35,8,1,4,1,1);//この弾幕をかべにあたったら反射するようにしたいと思っているのですが・・・
        boss_shot.bullet[i].reb_flag=0;
                              }
       if(boss_shot.bullet[i].cnt>0)
      boss_shot.bullet[i].spd+=0.3;           
    }
        if(boss_shot.bullet[i].state==1){
       if(boss_shot.bullet[i].cnt<40){
    boss_shot.bullet[i].spd-=0.15;
       }
       if(boss_shot.bullet[i].reb_flag==0){
              if(boss_shot.bullet[i].x<3 || boss_shot.bullet[i].x >FMX-3 ){
     boss_shot.bullet[i].angle=PI-boss_shot.bullet[i].angle;
     boss_shot.bullet[i].reb_flag=1;//反射するかどうかのフラグ。
    }
      if(boss_shot.bullet[i].y<3 ){
     boss_shot.bullet[i].angle=PI2-boss_shot.bullet[i].angle;
     boss_shot.bullet[i].reb_flag=1;
      }
      
      
     }
    }
  
  
  }
  }


}


円形に発射された弾が一度だけ反射するようにしたいのですが、
2回目の円形発射では一部が反射せず、
3回目からは弾が反射しません
 
どこが問題なのでしょうか・・
 
 
 



画像

yrao

Re:作成中のボス弾幕の不具合について

#2

投稿記事 by yrao » 15年前

え…と

お手数をおかけする質問で申し訳ないです…

ソース、エラーの状態などで、説明不足のことが多いかもしれません。
不明な点がありましたら聞いて下さい…

あ~る

Re:作成中のボス弾幕の不具合について

#3

投稿記事 by あ~る » 15年前

弾幕簡略化関数の仕様がわからないので間違ってるかもしれませんが…

二個目の方は

if(t%200==180){
       bullet_way(boss_shot.bullet.x,boss_shot.bullet.y,35,bossatan2(),PI2/35,8,1,4,1,1);//この弾幕をかべにあたったら反射するようにしたいと思っているのですが・・・
boss_shot.bullet.reb_flag=0;
}

の部分で、最初に撃っておいた残像の弾から反射する弾が出るようにしていんですよね?(違ってたらすいません)
ここでのboss_shot.bulletは、最初の残像の弾なので、reb_flagの初期化も、発射された反射弾ではなく最初の残像の弾にしか行われてない気がします
おそらく、構造体初期化の時に全部の変数には0が代入されてる(のかは知りませんが多分)ので一回目の弾は全部反射し、二回目三回目は一回目の弾と同じのが使われたりして、既にreb_flagの値が1になり初期化されていないので反射しないのでしょう

なので、reb_flag=0にする条件を
(boss_shot.bullet.state==1&&boss_shot.bullet.cnt==0)

とかにすればちゃんと反射してくれると思います^^
見にくかったら申し訳ないです(-.-;)
お布団からなかなか抜け出せずに携帯から書いてるので(笑)



一個目はどんな弾幕にしたいのかよくわかりませんでした……(-.-;)
ばらけ気味の2way弾ていうのはどんな感じに?

画像

あ~る

Re:作成中のボス弾幕の不具合について

#4

投稿記事 by あ~る » 15年前

布団から出てきました、あ~るです
とりあえず一個目のばらける理由だけ書いときます

0.03+0.002*t

とありますが、例えばtが1の時は
最大値 0.032
最小値 0.030

ですが、tが1000の時は
最大値 32.000
最小値 0.030

みたいになっちゃうのでバラけます
画像

yrao

Re:作成中のボス弾幕の不具合について

#5

投稿記事 by yrao » 15年前

あ~るさんありがとうございます。あけおめです。
 
 



まず最初に、おかげさまで二つとも思っていた通りに動作させることができました。
どうもありがとうございます。
 
 
・一つ目


> ばらけ気味の2way弾ていうのはどんな感じに?

説明不足すみません;
添付した画像のような感じなのですが・・質問時に図を載せるべきでしたね・・・
次回からはそうするようにしたいと思います。


> 0.03+0.002*t
>
> とありますが、例えばtが1の時は
> 最大値 0.032
> 最小値 0.030
>
> ですが、tが1000の時は
> 最大値 32.000
> 最小値 0.030
>
> みたいになっちゃうのでバラけます

・・・そういうことでしたか・・・
気づきませんでした(-.-;)

0.03*t+rang(0.3)

のように設定したところ、一定のばらけ方になってくれました。
 


・二つ目

> おそらく、構造体初期化の時に全部の変数には0が代入されてる(のかは知りませんが多分)ので一回目の弾は全部反射し、二回目三回目は一回目の弾と同じのが使われたりして、既にreb_flagの値が1になり初期化されていないので反射しないのでしょう
>
> なので、reb_flag=0にする条件を
> (boss_shot.bullet.state==1&&boss_shot.bullet.cnt==0)
>
> とかにすればちゃんと反射してくれると思います^^
 
なるほど・・・
上記の条件にしたところ、正常に反射させることができました!

_________________________________

> 見にくかったら申し訳ないです(-.-;)
> お布団からなかなか抜け出せずに携帯から書いてるので(笑)
 
全然大丈夫でしたよ(^_^;
分かりやすい説明ありがとうございました。
 
私も閲覧は携帯ですることが多いですね・・・
普段はパソコンがオフラインなので;

閉鎖

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