我可能遗漏了一些非常简单的东西,但我不明白为什么这个函数总是返回true并记录这两个对象,即使它们彼此不在一起。 我的代码:
var ul = $("ul.ul-to-fix");
if(ul.find("li").length>{max_possible_rows)){
if(!ul.hasClass("width-calculated")){
ul.width(ul.find("li").eq(0).width()*ul.css("columns"));
ul.addClass("width-calculated");
}
}
这些值都不是0。该函数将每个对象带到属性: 宽度, 高度, X, 年。 这些都是正数。我检查了每个陈述的操作顺序,它们都很好。
答案 0 :(得分:1)
您的if语句不正确。请参阅下面的调整算法和基本控制台断言。
基本上你需要检测任何边缘之间是否没有空格。如果没有空间,则表示发生了碰撞。
细分如下:
步骤1。
检查rectangle1的左边缘。
如果rectangle1的左边缘小于rectangle2(x2 + b2)的右边缘,则可能是rectangle1的左边和rectangle2的右边的交点。
第二步。
检查rectangle1的右侧。
如果rectangle1的右侧大于rectangle2的左侧,则rectangle1与rectangle2左侧的rectangle2相交。我们使用&&&&和确保发生碰撞。
我们对两个矩形的y坐标进行完全相同的检查,以检测矩形是否在y平面上相交。
var collideRect = function (obj1, obj2) {
var collision = false;
var x1 = obj1.x,
y1 = obj1.y,
x2 = obj2.x,
y2 = obj2.y;
var b1 = obj1.breadth,
h1 = obj1.height;
var b2 = obj2.breadth,
h2 = obj2.height;
var xCollide,
yCollide;
// if left edge of rect1 is left of the left edge of rect2 plus its
// width AND left edge of rect1 plus rect1's width is greater than
// the left edge of rect2, we have an x-coordinate collision.
// if either set of conditions is false, the rects don't overlap.
if (x1 < x2 + b2 && x1 + b1 > x2) {
xCollide = true;
}
// same as the x check but on the y plane
if (y1 < y2 + h2 && h1 + y1 > y2) {
yCollide = true;
}
if (xCollide && yCollide) {
console.log(JSON.stringify(obj1) + ". " + JSON.stringify(obj2));
collision = true;
}
return collision;
}
// test
var rect1 = {
x: 5,
y: 5,
breadth: 50,
height: 50
};
var rect2 = {
x: 20,
y: 10,
breadth: 10,
height: 10
};
console.assert(collideRect(rect1, rect2) === true); // collision
var rect3 = {
x: 55,
y: 55,
breadth: 50,
height: 50
};
var rect4 = {
x: 20,
y: 10,
breadth: 10,
height: 10
};
console.assert(collideRect(rect3, rect4) === false); // no collision