現在direct3dでフライトゲームを作っており、当たり判定部分を考えているのですがうまくいきません。メタセコイアでxファイルを作成し、ビルボードで表示している(敵も自弾も)のですが、そもそも基準点はどこに来るのか、プログラム上で指定する縦横高さがわからないなど当たり判定以前の問題のような気もするのですが・・・。とりあえず、該当部分のコードを載せるのでご享受お願いします。
↓ゲームメインの攻撃部分↓
if(GetKeyboardTrigger(DIK_Z)){
_for(int i = 0; i < ATTACKNUM; i++){
__if( man_bullet[i].flag.bullet == 0){
___man_bullet[i].flag.bullet = 1;
___//自機の座標セット
___mat_world[15+i]._41 = mat_world[0]._41;
___mat_world[15+i]._42 = mat_world[0]._42+2;
___mat_world[15+i]._43 = mat_world[0]._43;
___break;
__}
_}
}
for(int i = 0; i < ATTACKNUM; i++){
_if(man_bullet[i].flag.bullet == 1){
__mat_world[15+i]._43 ++;
__man_bullet[i].cnt.bullet++;
__if(man_bullet[i].cnt.bullet >= 100){
___man_bullet[i].flag.bullet = 0;
___man_bullet[i].cnt.bullet = 0;
___mat_world[15+i]._42 = -100;
__}
__for(int j = 0; j < ENEMYNUM; j++){
___man_bullet[i].flag.atk_result =
___Hit_Judging(&mat_world[5+j]._41, &mat_world[5+j]._42, &mat_world[5+j]._43,
________enemy[j].x, enemy[j].y, enemy[j].z,
________&mat_world[15+i]._41 , &mat_world[15+i]._42, &mat_world[15+i]._43,
________man_bullet[i].x, man_bullet[i].y, man_bullet[i].z );
___if(man_bullet[i].flag.atk_result == 1){
____man_bullet[i].flag.atk_result = 0;
____man_bullet[i].flag.bullet = 0;
____man_bullet[i].cnt.bullet = 0;
____mat_world[5+j]._43 = 150;
____mat_world[15+i]._42 = -100;
____break;
___}
__}
_}
}
↓当たり判定部分↓
int Hit_Judging( float *xpos1 , float *ypos1 , float *zpos1 ,
________float x1, float y1, float z1,
________float *xpos2 , float *ypos2 , float *zpos2 ,
________float x2, float y2, float z2 )
{
_for(int i = 0; i < ATTACKNUM; i++){
__if(man_bullet[i].flag.bullet == 1){
___for(int j = 0; j < ENEMYNUM; j++){
____if( ((xpos1[j] - (x1/2) ) < (xpos2[i] + (x2/2) ) &&
______(xpos1[j] + (x1/2) ) > (xpos2[i] - (x2/2) )) &&
______((ypos1[j] + y1 ) < ypos2[i] && ypos1[j] > (ypos2[i] + y2 )) &&
_______(zpos1[j] == zpos2[i]) ){
_____return 1;
____}else
_____return 0;
___}
__}
_}
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この一部のコードだけ見ても何ともコメントできません。
クラスや変数の役割は分からないですし、「15+i」などのハードコーディングの意味も分かりませんので。ただ一般的な当たり判定の話をすると、「球体当たり判定」が一番簡単で高速です。2つの物体の距離を求めて、その距離が一定以下なら当たりと判定する方法です。
参考までに2点の距離を求める関数を載せておきます。
FLOAT FindDistance(const D3DVECTOR& v1, const D3DVECTOR& v2)
{
FLOAT dx = v2.x - v1.x;
FLOAT dy = v2.y - v1.y;
FLOAT dz = v2.z - v1.z;
return sqrtf(dx*dx + dy*dy + dz*dz);
}
>この一部のコードだけ見ても何ともコメントできません。クラスや変数の役割は分からないですし、
>「15+i」などのハードコーディングの意味も分かりませんので。
言われてみればそうですね。すみませんでした。ご迷惑をおかけしました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 訳し方を教えてください 3 2023/01/20 07:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# C++ と、 1 2022/11/07 23:45
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報