[英]Bug in collision detecting algorithm, Javascript
好的,所以我正在用JavaScript制作2D平台游戲,並且為了進行碰撞檢測,我有兩種類型的對象:被焦點區域和焦點區域檢測到的游戲對象; 檢測對象都具有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;}
注意括號!
JS使用C型短路評估,意思是:
因此,您需要額外一對方括號以將or運算符兩側的表達式分組:
if ((ax1 >= bx1 && ax1 <= bx2) || (bx1 >= ax1 && bx1 <= ax2)) {
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.