[英]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.