ばらまきショットが点滅;

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

ばらまきショットが点滅;

#1

投稿記事 by 独学初心者 » 17年前

こんにちは。
先日はありがとうございました。

大分進んで、ばらまきショットを実装してみようと思ったのですが、これがどうにもうまくいきません;
どうも自分で打ち込んで、うまくいかないものだから管理人様のソースをコピペしてみても駄目でした;

症状としては、ばらまきショットが発生して、しばらくばらまいていると、点滅が始まってしまいます。
弾の進み具合もコマ送りな感じで、消えている最中も当たり判定はある…みたいです。単発のものは普通に撃てています。

いったいぜんたいどうしてこんなことになってるんだろうか見当がつきません;
思いつく限りの改変はしてみたのですが、まだ知識が浅いもので、お力を借りれないかと思い、質問させていただきました。

ショットのパターンは、シューティングゲームの館のコピペですので、あとは行動パターンの組み込みに対するバグなのかなとも思ってはいるのですが…

なので、敵パターンへの組み込み方の方を書いておこうと思います。
void BossPattern1 (){
	int j;
	if(boss.counter<100)
	boss.y+=1.5f;
	
	if(boss.counter==100){
                for(j=0;j<ENEMY_TOTAL_NUM;j++)
                        if(EnemyShot[j].flag==0)
                                break;
                EnemyShot[j].mem_ex=boss.x;
                EnemyShot[j].mem_ey=boss.y;
                EnemyShot[j].mem_px=Player.x;
                EnemyShot[j].mem_py=Player.y;
		EnemyShot[j].counter=0;
                EnemyShot[j].flag=1;
                EnemyShot[j].pattern=2;
                EnemyShot[j].img=0;
				
        }
 }


何卒、よろしくお願いいたします。

独学初心者

Re:ばらまきショットが点滅;

#2

投稿記事 by 独学初心者 » 17年前

すみません;
なにかの考えの一助になるかわかりませんが追加の状態です。

どうやら、ばらまきに関わらず、連続発射するようなショット全部がそうなってしまってるみたいです;

少し進んで、消えて(でも弾の当たり判定はそこでストップされている状態)
です;

よろしくお願いします;

array

Re:ばらまきショットが点滅;

#3

投稿記事 by array » 17年前

ショットが原因だとすると、敵パターンに間違いがある可能性は低いと思います。

> 症状としては、ばらまきショットが発生して、しばらくばらまいていると、点滅が始まってしまいます。
> 弾の進み具合もコマ送りな感じで、消えている最中も当たり判定はある…みたいです。単発のものは普通に撃てています。

考えられるのはシューティングの館でいう18章参照のvoid EnemyShotCalcDisp()で描画してるので
ここで正常に描画してない可能性もありますが・・・解説通りに書いてあれば大丈夫だと思います・・・が可能性として見なおしてもらっても良いと思います。

一番怪しいのが、シューティングの館では、敵弾と自機の当り判定は解説されてませんので、多分自分で考えて、判定を行ってると思うのですが、そこに間違いがあると思います。


敵弾と自機の当り判定はどのようにしてますか?

Dixq (管理人)

Re:ばらまきショットが点滅;

#4

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

う~ん、とりあえずブレイクポイントでバグの場所を限定していくしかなさそうです。
描画しているところにブレイクポイントをおき、
コマ送り状態で、いつ点滅するのか調べてみて下さい。
その時の値はどうなっているのか、何故描画処理がおこなわれていないのか、
(例えばフラグがオフになったりオンになったりしているなど)
関数自体がその時呼ばれていない可能性もありますし。
とりあえずバグの原因を少しずつ突き止めていきましょう。

独学初心者

Re:ばらまきショットが点滅;

#5

投稿記事 by 独学初心者 » 17年前

array様
ご返答ありがとうございます。
void EnemyShotCalcDisp()ですか…ちょっとそこを重点的にもう一度調べてみます。
えっと、敵弾と自機…ってことは…
そっちは自分のほうでは
void CollisionDetection2(){
       for(int i=0;i<ENEMY_TOTAL_NUM;i++){//敵の最大数100体分ループ
           for(int j=0;j<ENEMY_TOTAL_SHOT_NUM;j++){//1組200個分のループ
                 if(EnemyShot.EnemyShots[j].flag==1){//1個でも発射中の弾があれば
					 if(Player.flag==1){//プレイヤーの表示中なら
                        double x,y;
                        int range;
                        x=(double)(EnemyShot.EnemyShots[j].x-Player.x);//x=(弾のx位置-プレイヤーのx位置)
                        y=(double)(EnemyShot.EnemyShots[j].y-Player.y);//x=(弾のy位置-プレイヤーのy位置)
                        range=9;//(弾の当たり判定)
                        
		
                        if((int)sqrt(x*x+y*y) < range+Player.range){
                             EnemyShot.EnemyShots[j].flag=0;
							 Player.num-=1;
							 if(Player.num<0){
								 Player.flag=0;
                             break;
			   }
			}
                    }
                 }
              }
           }
        }


と、してあります。
このへんの関係関係でしょうか?

独学初心者

Re:ばらまきショットが点滅;

#6

投稿記事 by 独学初心者 » 17年前

管理人様
ご返答、ありがとうございます。
デバック、今のところ地味にちまちまやってるんですが、いったいどこでおこってるのやら…
まだばらまきのほうだけしかやってなかったので、直線連続発射のほうもちょっとコマ送りしてみます。

ばらまきの方は、あちこちコマ送ってみたんですが、なかなか消える瞬間とかで自動変数とかの画面にならなくって;

ちょっと、範囲も増やしてみますです。

独学初心者

Re:ばらまきショットが点滅;

#7

投稿記事 by 独学初心者 » 17年前

あ!!

わ、わかりましたぁ;
画面外に玉が出たときにフラグを戻すプログラムが悪さしてたみたいです;
デバックかけると発射した瞬間で関数の表示がされてたので気がつかなかったです;

最後にフラグ戻すところが、弾が画面外に出たときに弾一発ではなくて一組丸まるフラグ戻してました。

ヒントいただいてやっとわかりました;

凡ミスでしたが、多分自分じゃ気がつかなかったです;
お答えいただきありがとうございました。

閉鎖

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