弾幕について

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

弾幕について

#1

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

こんばんは。弾幕について質問があります。
18way*2のレーザーを回転させながら、9way*2の渦巻き弾を出す感じの弾幕です。
今日始めて自分でオリジナルの弾幕を作ってみたんですけど、上手く動きませんでした。
18way*2のレーザーを回転させながら、9way*2の渦巻き弾を出す感じの弾幕なんですけど、レーザーはしっかり描画されるんですけど、渦巻き弾が本来20カウントに一回出るのでもうちょっと出るはずなんですけど、まばらにしか描画されませんでした。(画像参照)
多分、処理のスピードとかの問題だと思うんですけど、それはそれで初心者なのでどこをどうすれば効率化が出来るのかわからないので、教えていただけると嬉しいです。

<お詫び>
コードはプレタグで、っていうのは知ってるんですけど、プレタグっていうのが何なのか分かんなかったので、普通に書いてしまいました・・・申し訳ございません・・・

void boss_shot_bulletH010(){
#define TM010 240
#define DIST 0
int i,j,k,l,m,n,s,t=boss_shot.cnt%TM010,t2=boss_shot.cnt;
double angle,angle2;
static int num;
int plmn=1;
angle=PI;
angle=PI2;
if(t2==0)num=4;
if(boss.hp<=0) {
lazer.flag=0;
lazer.haba=0;
}
if(t==0){
for(l=0;l<2;l++){
for(j=0;j<2;j++){
for(s=0;s<18;s++){
if((k=search_lazer())!=-1){
lazer[k].col = j*2+1;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = angle+PI2/18*s+PI/18*j;//角度
lazer[k].startpt.x= boss.x+cos(lazer[k].angle)*DIST;
                       //座標
lazer[k].startpt.y= boss.y+sin(lazer[k].angle)*DIST;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 2;//幅
lazer[k].state = j;//ステータス
lazer[k].state2 = l;
lazer[k].length = 0;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=1;//回転フラグ
lazer[k].lphy.conv_base_x=boss.x;//回転基準位置
lazer[k].lphy.conv_base_y=boss.y;
lazer[k].lphy.conv_x=lazer[k].startpt.x;//回転元の位置
lazer[k].lphy.conv_y=lazer[k].startpt.y;//代入
input_lphy(&lazer[k],80,0);
}
}
}
}
}
if(t%20==0){//20カウント毎に発射
for(m=0;m<9;m++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd=0;
boss_shot.bullet[k].x=boss.x;
boss_shot.bullet[k].y=boss.y;
boss_shot.bulle[k].angle=angle2+PI2/9*m+PI2/TM010*t;
                       //渦巻き
boss_shot.bullet[k].flag=1;
boss_shot.bullet[k].cnt=0;
boss_shot.bullet[k].spd=2;
boss_shot.bullet[k].eff_detail=1;
boss_shot.bullet[k].state=0;
se_flag[0]=1;
}
}
}
if(t%20==0){
for(m=0;m<9;m++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].knd=0;
boss_shot.bullet[k].x=boss.x;
boss_shot.bullet[k].y=boss.y;
boss_shot.bullet[k].angle=angle2+PI2/9*m-PI2/TM010*t;
                       //渦巻き
boss_shot.bullet[k].flag=1;
boss_shot.bullet[k].cnt=0;
boss_shot.bullet[k].spd=2;
boss_shot.bullet[k].eff_detail=1;
boss_shot.bullet[k].state=1;
}
}
}
//60カウント毎に弾の色を変える
for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet.flag==1){
if(t>0 && t<59){
boss_shot.bullet.col=3-boss_shot.bullet.state*2;
}
if(t>60 && t<119){
boss_shot.bullet.col=1+boss_shot.bullet.state*2;
}
if(t>120 && t<179){
boss_shot.bullet.col=3-boss_shot.bullet.state*2;
}
if(t>180 && t<239){
boss_shot.bullet.col=1+boss_shot.bullet[i].state*2;
}
}
}
//レーザー計算
for(i=0;i<LAZER_MAX;i++){
if(lazer[i].flag>0){
if(t2<30){
lazer[i].length=lazer[i].length+20/(lazer[i].state2*2+1);
              //レーザーの根元に短いレーザーで当たり判定調節
}
if(lazer[i].state==0){//stateが0のレーザーの時間による処理
if(t>0 && t<19){
lazer[i].haba+=0.5;
lazer[i].hantei+=0.03;
}
if(t>40 && t<59){
lazer[i].haba-=0.5;
lazer[i].hantei=0;
}
if(t>120 && t<139){
lazer[i].haba+=0.5;
lazer[i].hantei+=0.03;
}
if(t>160 && t<179){
lazer[i].haba-=0.5;
lazer[i].hantei=0;
}
}
if(lazer[i].state==1){//stateが1のレーザーの処理
if(t>60 && t<79){
lazer[i].haba+=0.5;
lazer[i].hantei+=0.03;
}
if(t>100 && t<119){
lazer[i].haba-=0.5;
lazer[i].hantei=0;
}
if(t>180 && t<199){
lazer[i].haba+=0.5;
lazer[i].hantei+=0.03;
}
if(t>220 && t<239){
lazer[i].haba-=0.5;
lazer[i].hantei=0;
}
}
if(t<239){
lazer[i].angle+=PI/1190;
}
}
}
if(t==TM008-1)
num=(++num);
}

あ~る

Re:弾幕について

#2

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

環境はBCCでWindowsXPです

Dixq (管理人)

Re:弾幕について

#3

投稿記事 by Dixq (管理人) » 16年前

龍神録の館に書いてないメンバがあったり、定義があったりするので、コピペで試してみる事が出来ません。
コンパイル出来るようなコードを提示してもらえるとありがたいです。
また、プレタグについては規約をご覧下さい。

あ~る

Re:弾幕について

#4

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

すいません、勝手に追加したの忘れてました
お手数ですがレーザーの構造体にstate2を追加して下さい
多分それだけだと思うので
よろしくお願いします

規約ちゃんと読めてなくてすいません…
家帰ったらパソコンでチェックします

Dixq (管理人)

Re:弾幕について

#5

投稿記事 by Dixq (管理人) » 16年前

mPI2には何が入っています?

なお、プレタグを使った投稿は<pre>と</pre>でコードを囲めばOKです(<>は半角)

あ~る

Re:弾幕について

#6

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

わ、すいません、-をいれ忘れてました…
mPIではなくm-PIです
誤字とかいうオチだったらすいません…
でも一応コンパイルは通っているし、レーザーを描画しなかったらちゃんと渦巻きになったので、多分掲示板に書く時に何かミスったんだと思います
最初の投稿のコードは直しときます

あ~る

Re:弾幕について

#7

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

すいません、自己解決しました;
自己解決といっても理由はよくわからないですが、何故か弾幕の順番で2番目にこの弾幕が来るようにすると正常に動作せず、他の順番だったら普通に動きました
自分でも理由がよくわからないので、情報が少ないですが、何か理由だと思われるものがあったら教えて下さい
あと、弾幕効率化の方法は随時募集中です
自分的には、いちいち動きをカウンタで設定してるのはどうにかしたいです…

閉鎖

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