ページ 11

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

Posted: 2011年5月11日(水) 18:10
by 奥兵
自機と敵機の距離が一定以内にならないようにすることを期待して書きました。
いったん敵機との境界線で止まるまではいいのですが、そのごその場に引っ掛かり、敵機の方向に移動するように入力すると
境界線の中に入って敵機に重なってしまい、今度は境界線内に閉じ込められてしまします。
ほんとはグラフィックが重ならないようにしたいのですが・・・
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;

	};




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

Posted: 2011年5月11日(水) 19:43
by h2so5
奥兵 さんが書きました:

コード:

	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: 当たり判定がうまくいきません

Posted: 2011年5月11日(水) 20:20
by 奥兵
御教授ありがとうございます。
おかげさまで、ご指摘いただいた部分を直したら、思い通りになりました。