OK、JavaScript で 2D プラットフォーム ゲームを作成しています。衝突検出には 2 種類のオブジェクトがあります。フォーカス エリアとフォーカス エリアによって検出されるゲーム オブジェクトです。オブジェクトを検出すると、ボックスを形成する 4 つの座標があり、x1 と y1 は左/上、x2 と y2 は左/下です。
ゲーム オブジェクトのボックス座標は不変の数値であり、ゲーム オブジェクトの位置に対して相対的に計算する必要がありますが、フォーカス エリアの座標は正確なスポットになるように更新されます。
私の問題は、何らかの理由で、このコード (以下) がゲーム オブジェクト (座標) よりも小さいフォーカス領域に出くわしたときに、フォーカス領域がゲーム オブジェクトのボックスの左上のピクセルと競合しない限り、検出されないことです。私はこれを修正しますか?(ちなみに、これはすべて二重の「forループ」にあります)
var O_x=game.objects[ii].phy.pos.x,
O_aur_x_1=game.objects[ii].col.aur.x1,
O_aur_x_2=game.objects[ii].col.aur.x2,
F_x_1=game.focusAreas[i].x1,
F_x_2=game.focusAreas[i].x2,
O_y=game.objects[ii].phy.pos.y,
O_aur_y_1=game.objects[ii].col.aur.y1,
O_aur_y_2=game.objects[ii].col.aur.y2,
F_y_1=game.focusAreas[i].y1,
F_y_2=game.focusAreas[i].y2;
if ( (O_x + O_aur_x_1) >= F_x_1 && (O_x + O_aur_x_1) <= F_x_2 || F_x_1 >= (O_x + O_aur_x_1) && F_x_1 <=(O_x + O_aur_x_2))
{// if object's x1 is within xfocus range
}
else if ( (O_x + O_aur_x_2) >= F_x_1 && (O_x + O_aur_x_2)<= F_x_2 || F_x_2 >= (O_x + O_aur_x_1) && F_x_1 <=(O_x + O_aur_x_2))
{// if object's x2 is within xfocus range
}
else{continue;}
if ( (O_y + O_aur_y_1) >= F_y_1 && (O_y + O_aur_y_1) <= F_y_2 || F_y_1 >= (O_y + O_aur_y_1) && F_y_1 <=(O_y + O_aur_y_2))
{// if object's y1 is within yfocus range
}
else if ( (O_y + O_aur_y_2) >= F_y_1 && (O_y + O_aur_y_2) <= F_y_2 || F_y_2 >= (O_y + O_aur_y_1) && F_y_1 <=(O_y + O_aur_y_2))
{// if object's y2 is within yfocus range
}
else{continue;}