ページ 11

アクションゲーム

Posted: 2009年1月21日(水) 18:03
by 初心者
こないだお世話になった初心者です。
僕は今、アクションゲームを作っています。
それで、自キャラにライフを作りたいと思って、以下の文を書きました。
struct Enemy{
     int life;			//生命力
     int temp1;			//自由に使える変数
//判定用変数
     int hantei;			//自由に使える変数
};
const int HANTEI = 3000;		//敵と自キャラの判定間隔
int jiki_life;			//前の自キャラ生命力	
//敵と自キャラの当たり判定
Ball2D m = { g_jikipos, 18 };
g_jiki_life = 2;
while(ProcessMessage == 0 && g_jiki_life > jiki_life){
      if ( g_enemies.hantei < (GetNowCount() + HANTEI) ){
         if (HitTestBallAndBall( b, m ) == TRUE ){
                   g_jiki_life--;
         }
      }
}
	if (g_jiki_life == 0){
		return TRUE;
	}

ですが、当たり判定がなくなったり、1回当たったらすぐゲームオーバーになってしまいます。
なぜそうなるか、どこが間違っているかを教えてください。

Re:アクションゲーム

Posted: 2009年1月21日(水) 18:15
by 通りすがり
各関数の内容もわからないし、どういうゲームの仕様かもわからないし、どこを省略してるのかもさっぱりわかりません。

そもそもコンパイルすら出来ません。

Re:アクションゲーム

Posted: 2009年1月21日(水) 18:18
by Mist
ソースが断片的すぎるので予想になりますが、g_enemies.hanteiの更新タイミングがまずいとそんな動きになりそな気はしますが。

Re:アクションゲーム

Posted: 2009年1月22日(木) 22:40
by Mikan
>当たり判定がなくなったり、1回当たったらすぐゲームオーバーになってしまいます。
推測ですが、当り判定を行った後、再度当り判定をしてしまい、
g_jiki_lifeが0以下になってしまって

if (g_jiki_life == 0)

の条件に当てはまらないので当り判定がなくなったようにみえるのではないでしょうか?

また、1回でゲームオーバーになるのも何回も当り判定入ってしまい1回の判定で0になっているのでは?
と思います。

たとえばシューティングゲームで敵がプレイヤーのショットに当たった場合
敵の体力を1マイナスして、再度判定しないようにプレイヤーのショットを消してしたりします。

推測なので参考までに^^

Re:アクションゲーム

Posted: 2009年1月23日(金) 22:09
by 初心者
通りすがりさん、Mistさん、コードが荒くてすいません。
関数は、DXライブラリーを使用しています。
コードは、当たり判定の部分です。
Mikanさん、推測ありがとうございます。
while(ProcessMessage == 0 && g_jiki_life > jiki_life){  
の部分がいらないということでしょうか?
きずいたことがあればご教授お願いします。

Re:アクションゲーム

Posted: 2009年1月25日(日) 19:58
by Mikan
>きずいたことがあればご教授お願いします。
ソースファイルが全部見せていただけるのなら特定できるかと思います。
それとどんなゲームにしたいか考えてることを教えてください^^

ゲームを作ってると沢山難題に出会うでしょうけど、質問したり考えたりしながら
がんばってください^^

Re:アクションゲーム

Posted: 2009年1月25日(日) 21:51
by 初心者
これがゲーム本体の処理です。最初に意味のわからないインクルード文が書いてありますが、とばしてください。CollisionCharacter関数が、当たり判定の関数です。敵の弾と自キャラの当たり判定で、自力でライフを作ることが出来ましたが、敵と自キャラの場合がうまくいきません。
ご教授お願いします。

Re:アクションゲーム

Posted: 2009年1月26日(月) 12:31
by Mikan
CollisionCharacter関数の最初に 
if (g_enemies.used == TRUE){
	Ball2D b = { {g_enemies.position.x, g_enemies.position.y},
					  g_enemies.hankei
	};


ところで敵が使われているかどうかの判定をして衝突判定にはいっているようですが、
このままだと、g_enemies.used == FALSEの時にも判定に入ってしまい
前回のBall2D bの値で判定がおこなわれているのでは?とおもいました。

g_enemies.used == FALSEの時は衝突判定をしないのが良いのではないでしょうか?

それで一度試してみてください。

Re:アクションゲーム

Posted: 2009年1月26日(月) 22:08
by 初心者
if (g_enemies.used == TRUE){
の下に
if (g_enemies.used == FALSE) break;
という物を入れてみましたが、ダメでした。

Re:アクションゲーム

Posted: 2009年1月26日(月) 22:42
by Mikan
すみません、ネスト見間違えていました^^;
もう一度調べてみますね^^;

Re:アクションゲーム

Posted: 2009年1月26日(月) 23:29
by Mikan
ソースファイルとにらめっこしているんですが、色々試せないのですこし混乱気味ですw
なので、参考程度にみてください。

//敵の弾と自キャラの当たり判定
のところで、g_ebullets.used衝突後FALSEに戻していないのが気になるのと、

すこし上に似たようなことをしている
//敵と自キャラの当たり判
の中で
g_enemies.jiki_life = 3;
としていますが、
//敵の弾と自キャラの当たり判定
ではありませんでした。

参考になれば幸いです。

Re:アクションゲーム

Posted: 2009年1月27日(火) 21:33
by 初心者
はい
ありがとうございました。
少しずつ変更しながら、やってみます。

Re:アクションゲーム

Posted: 2009年1月29日(木) 21:08
by 初心者
このアクションゲームには関係ありませんが、どうしても分からないので、この掲示板を使わせていただきます。
・丸と四角の当たり判定の関数
です。
教えてください。

Re:アクションゲーム

Posted: 2009年1月29日(木) 23:05
by 組木紙織
龍神録プログラミングの館 34章 参照のこと

Re:アクションゲーム

Posted: 2009年2月02日(月) 20:40
by 初心者
返信ありがとうございます。
見ました。