ページ 11

クラスを用いた当たり判定

Posted: 2012年6月22日(金) 17:04
by ジャン
アクションゲームを作っているのですが
クラスを使った当たり判定の出し方がいくら考えてもわかりません。

コード:

class a{
protected:
   int x1,x2,y1,y2;//当たり判定
  int x3,x4,y3,y4;//攻撃判定
	int atari;//当たれば1
};
class chara1:public a{
};
class chara2:public a{
};
継承クラスの判定を比較して当たっていれば
charaクラスに1を返すようなことをしたいのですがどのようにしたらよいのでしょう。
c++初心者ですがよろしくおねがいします。

Re: クラスを用いた当たり判定

Posted: 2012年6月22日(金) 20:37
by nil
class aにstaticなCheckHit関数を作り、引数にclass aのポインタか参照を受け取ります。
CheckHit関数を適当な場所で呼び出し、chara1やchara2の参照やポインタを渡せばいいです

Re: クラスを用いた当たり判定

Posted: 2012年6月24日(日) 00:53
by ジャン
返信ありがとうございます。
こんな感じですか?

コード:

class a{
public:
int x1,x2,y1,y2;//当たり判定
int x3,x4,y3,y4;//攻撃判定
int atari;//当たれば1
static int checkhit(a* hantei,a* hantei2);
};
int a::checkhit(a* hantei,a* hantei2){
 if(hantei->x1<hantei2->x4&&hantei->x2>hantei2->x3&&hantei->y1<hantei2->y4&&hantei->y2>hantei2->y3)
 return 1;
}
class chara1:public a{
};
class chara2:public a{
};
int main{
chara1 chara1;
chara2 chara2;
chara1.atari=a::checkhit(&chara1,&chara2);
retun 0;
}

Re: クラスを用いた当たり判定

Posted: 2012年6月24日(日) 04:24
by nil

コード:

int a::checkhit(a* hantei,a* hantei2){
 if(hantei->x1<hantei2->x4&&hantei->x2>hantei2->x3&&hantei->y1<hantei2->y4&&hantei->y2>hantei2->y3)
 return 1;
}
これでは当たっていない場合戻り値のreturnがないのでVC++ではエラーか警告が出たはずです。

Re: クラスを用いた当たり判定

Posted: 2012年6月24日(日) 14:14
by ジャン

コード:

int a::checkhit(a* hantei,a* hantei2){
 if(hantei->x1<hantei2->x4&&hantei->x2>hantei2->x3&&hantei->y1<hantei2->y4&&hantei->y2>hantei2->y3)
  return 1;
 else
  return 0;
}
こうですね。
ご指南ありがとうございました。