boss_shot_calc()とgraph_bullet()を組み合わせ

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

boss_shot_calc()とgraph_bullet()を組み合わせ

#1

投稿記事 by ft » 15年前

こんにちは。タイトルのようにboss_shot_calc()とgraph_bullet()のボス弾の描画部分を組み合わせることで、
BOSS_BULLET_MAXのループを減らしたいのですが上手くいきません。具体的には弾の座標や当たり判定は計算されているようですが、弾の描画がされない状態です。
無理矢理くっつけてますが以下がコードです。graph_bullet()の該当部分はコメントアウトしています。
//ボスの弾幕を計算する
void boss_shot_calc(){
      int i,eff;
        boss.endtime--;
        if(boss.endtime<0)
                boss.hp=-1;
        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.x<40 || boss_shot.bullet.x>300||
                                        boss_shot.bullet[i].y<-20 || boss_shot.bullet[i].y>280)
                                        boss_shot.bullet[i].flag=0;
                }
/****graph_bullet()からコピペ*****/
        //ボス
        if(boss_shot.flag>0){//弾幕データがオンなら
        //    for(j=0;j<BOSS_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
                        if(boss_shot.bullet[i].flag!=0){//弾データがオンなら
                eff=0;
                if(boss_shot.bullet[i].eff_detail==1){//風雨にも負けず用弾エフェクト
                    SetDrawBlendMode( DX_BLENDMODE_ADD, 100+GetRand(155)),eff=1 ;
                    DrawRotaGraphF(
                        boss_shot.bullet[i].x+FIELD_X+dn.x, boss_shot.bullet[i].y+FIELD_Y+dn.y,
                        0.9f, boss_shot.bullet[i].angle+1.5707963267948966192313216916395f,
                        img_bullet[boss_shot.bullet[i].knd][boss_shot.bullet[i].co[/url],TRUE,0);
                }
                if(boss_shot.bullet[i].eff==1)
                    SetDrawBlendMode( DX_BLENDMODE_ADD, 255),eff=1 ;

                DrawRotaGraphF(
                    boss_shot.bullet[i].x+FIELD_X+dn.x, boss_shot.bullet[i].y+FIELD_Y+dn.y,
                    0.9f, boss_shot.bullet[i].angle+1.5707963267948966192313216916395f,
                    img_bullet[boss_shot.bullet[i].knd][boss_shot.bullet[i].co[/url],TRUE,0);
                if(eff==1)
                    SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
                        }
         //       }
        }
/****graph_bullet()からコピペ*****/
        }
        boss_shot.cnt++;
}

fatens

Re:boss_shot_calc()とgraph_bullet()を組み合わせ

#2

投稿記事 by fatens » 15年前

コードは見てないんでどこがおかしいのかは知りませんが、
計算処理と描画処理は分けておいた方が良いと思います。
そうしておかないと一時停止などを導入するときに困ると思うので。

Tatu

Re:boss_shot_calc()とgraph_bullet()を組み合わせ

#3

投稿記事 by Tatu » 15年前

龍神録プログラミングの館と同じようにしているという仮定の下での推測ですが、
メインループにおいて、boss_shot_calc()などが
はいったboss_shot_main()のあとにgraph_main()が実行されるため、
弾の描画が行われた後に背景などが描画されることにより
描画されてないように見えるのだと思います。

ft

Re:boss_shot_calc()とgraph_bullet()を組み合わせ

#4

投稿記事 by ft » 15年前

>>Tatuさん
ご指摘の通りでした。
そこで正常に表示されるようにしてみたのですが、何故か処理が重くなってしまいました(ちなみにPSPにおける動作です)
ifを減らしたり、for文を省略しても何故か遅くなってしまうことが多々あります;
PSPではキャッシュミスが発生すると数十倍の処理時間が掛かるとかどうとか。
今回の操作がこれに該当するのか、この辺りがどういう処理によって発生するのかイマイチ分からない部分です…

>>fatensさん
そうですね、今回の場合は一纏めにすることで重くなってしまったことですし、分けて処理をした方が良さそうです。


この件に関しては以上の通りとなりましたのでここで解決とさせて頂きます。
ありがとうございました。

閉鎖

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