direct3dで当たり判定
現在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;
___}
__}
_}
}