発射された弾の当たり判定

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

発射された弾の当たり判定

#1

投稿記事 by Ex » 15年前

初めまして Exと申します。
現在STGを作っています。環境は、OSがVista エディタがBCC Deberoperです。
自機は描画・キー操作 弾は描画・発射・画面外にでた時の処理までできていて、
ここから当たり判定を付けようと思ったのですが、うまくいきません。
簡単に説明すると、

#defineで弾の数を決定 Tamakazu 50 とする
弾自体は配列で  Tama[Tamakaz[/url] とする

forを使って
Tama[Tamakaz[/url]をTamakazu分初期化(関数使用)
for(i=0,i<Tamakazu,i++;){ Tamaflag=0; }
こんな感じ

Zが押されていたらTama[Tamakaz[/url]の50個のうち1つフラグを立てる(関数使用)

フラグが立っていたら、フラグが立っているTana[tamakaz[/url]を発射描画(関数)

発射描画されている弾が、Y座標20より上にいけば(20より小さくなれば)
X++;


で、弾の発射描画まではいいんですが、Y座標20より上にいっても
Xがプラスされないんです。
当たり判定のコードは、

if(Tama.y<=20)X++;


です。
分かりにくい所があったら言って下さい。

シエル

Re:発射された弾の当たり判定

#2

投稿記事 by シエル » 15年前

Xって何を表しているんですか?

それと、当たり判定部分の関数を全部貼って下さい。

Ex

Re:発射された弾の当たり判定

#3

投稿記事 by Ex » 15年前

すいません Xは特に意味はないです。言い換えるなら適当な処理です。 X座標とかではないです。

当たり判定部分・・・というと、弾の当たり判定の範囲ですか?
それならば、弾は結構小さいので、単純に弾のX座標とY座標がそのまま当たり判定です。
弾が当たったかどうかの判定ならば、
if(Tama.Y<=20)X++;


だけで当たり判定を示しています。

当たったかどうかの判定は、関数を作るほど大掛かりなんでしょうか?
一応弾関係の関数を載せます

struct shot{ int x,y,flag; };

struct shot Tama[Tamakaz[/url];

//弾の初期化
void TamaReset(){
   for(i=0;i<Tamakazu;i++){
      Tama.x=ZikiX+14; Tama.y=ZikiY-1; Tama.power=5; Tama.flag=0;
   }
}
//Zが押されたらTamaのフラグを立てる
void StandFlag(){
   if(Key[KEY_INPUT_Z]==1){
      Counter=0;
      for(i=0;i<Tamakazu;i++){
         if(Tama.flag==0){ Tama.y=ZikiY+10;Tama.x=ZikiX+13;Tama.flag=1;break; }
      }
   }
}
//フラグの立っている弾を発射描画する
void Shot(){
   for(i=0;i<Tamakazu;i++){
      if(Tama.flag==1){
         Tama[i].y-=Tspeed;
         DrawCircle(Tama[i].x,Tama[i].y,1,Blue,TRUE);
      
         if(Tama[i].y<0){
            Tama[i].y=ZikiY-1;Tama[i].flag=0;}
      }
   }
}

シエル

Re:発射された弾の当たり判定

#4

投稿記事 by シエル » 15年前

if(Tama.Y<=20)X++;

↑これがなぜ当たり判定なのかよく分かりませんが、↑のif文はどこで呼び出しているんですか?

呼び出している部分コード全てと、Xを定義している部分のコードを貼って下さい。

Ex

Re:発射された弾の当たり判定

#5

投稿記事 by Ex » 15年前

ちょっと良くわからないので、コードをメモ帳に貼り付けて添付しました。
Xはグローバル変数で、定義しているのは上の方です
if文は int WINAPI Winmain の中のwhile文の中です(下の方)
if(Tama.Y<=20)X++;

は、発射されたTamaがY座標20より小さくなったらXをプラスするんですが、
Tamaという表現はダメなんでしょうか?それとも、もっと根本的に
おかしいところがあるんでしょうか?

シエル

Re:発射された弾の当たり判定

#6

投稿記事 by シエル » 15年前

if(Tama.Y<=20)X++;の処理が実行される前のShot();の処理でTamaの変数iが50になるので、

if(Tama.Y<=20)X++;の処理ではTama[50].yに対してだけ、if文が実行されていることになります。

よって、あなたの期待した動作にならないものと思われます。

Ex

Re:発射された弾の当たり判定

#7

投稿記事 by Ex » 15年前

分かりやすい回答ありがとうございます。
あとは自力で頑張ってみます。

閉鎖

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