当たり判定がうまくいきません

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

当たり判定がうまくいきません

#1

投稿記事 by 奥兵 » 14年前

自機と敵機の距離が一定以内にならないようにすることを期待して書きました。
いったん敵機との境界線で止まるまではいいのですが、そのごその場に引っ掛かり、敵機の方向に移動するように入力すると
境界線の中に入って敵機に重なってしまい、今度は境界線内に閉じ込められてしまします。
ほんとはグラフィックが重ならないようにしたいのですが・・・
VC++2008,DXライブラリを使用、OSは7です
↓そのクラスと一応使われる構造体も載せときます

コード:

void move(struct uni *mainuni,struct enemys *ene){
	double x,y,cx,cy,s;
	x=0;
	y=0;
	s=3;
    int White;
	White=GetColor(255,255,25);
	if((mainuni->x>-30)){
		if( CheckHitKey( KEY_INPUT_A ) == 1 ){
		x=-s;
		}
	}
	if((mainuni->y<570)){
		if( CheckHitKey( KEY_INPUT_S ) == 1 ){
			y=s;
		}
	}
	if((mainuni->x<770)){
		if( CheckHitKey( KEY_INPUT_D ) == 1 ){
			x=s;
		}
	}
	if((mainuni->y>-30)){
		if( CheckHitKey( KEY_INPUT_W ) == 1 ){
			y=-s;
		}
	}
	cx=pow((ene->x-mainuni->x+x),2);
	cy=pow((ene->y-mainuni->y+y),2);
		 
	if((cx+cy)>=(60*60)){
		DrawFormatString(100,140, White , "判定発生"  );
		mainuni->x=mainuni->x+x;	
		mainuni->y=mainuni->y+y;
	}else{
		mainuni->x=mainuni->x-x;	
		mainuni->y=mainuni->y-y;
	}
	
	mainuni->rad=atan2(ene->y-mainuni->y,ene->x-mainuni->x);

	
	DrawRotaGraph( (int)mainuni->x, (int)mainuni->y,1.0,mainuni->rad+PI/2, mainuni->image[0], TRUE ); 
	 
	
}
//下は↑で使われる構造体です、一応載せます
struct uni{
		int image[5];
		double x,y;
		 
		double rad;
		int HP;
		 
	};
struct enemys{
		int image[5];
		 
		double x,y;
	
		int HP;

	};




アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 当たり判定がうまくいきません

#2

投稿記事 by h2so5 » 14年前

奥兵 さんが書きました:

コード:

	cx=pow((ene->x-mainuni->x+x),2);
	cy=pow((ene->y-mainuni->y+y),2);
この部分は

コード:

	cx=pow((ene->x-(mainuni->x+x)),2);
	cy=pow((ene->y-(mainuni->y+y)),2);
正しくはこうではないですか?

奥兵

Re: 当たり判定がうまくいきません

#3

投稿記事 by 奥兵 » 14年前

御教授ありがとうございます。
おかげさまで、ご指摘いただいた部分を直したら、思い通りになりました。

閉鎖

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