Javascript 末日碰撞环

Javascript 末日碰撞环,javascript,arrays,canvas,collision-detection,fabricjs,Javascript,Arrays,Canvas,Collision Detection,Fabricjs,我正在为一个项目使用Fabric和JS。Fabric将画布中的对象建模为数组 我有一个冲突检测方法,它遍历canvas数组并确定何时检测到与新对象的冲突。检测功能正常,工作正常。我在屏幕上基本上有5个块,另一个块在向下的路径上。当它接触到它们时,它们会变色 我正在将它接触到的每个块的名称打印到控制台和屏幕上。我想让它显示最近被触摸的块 问题是总是漏掉一个街区。如果名称为以下颜色: Red Green Blue Pink Yellow 输出总是R、G、B、Y——偶尔遗漏的输出会改变,通常是粉红色

我正在为一个项目使用Fabric和JS。Fabric将画布中的对象建模为数组

我有一个冲突检测方法,它遍历canvas数组并确定何时检测到与新对象的冲突。检测功能正常,工作正常。我在屏幕上基本上有5个块,另一个块在向下的路径上。当它接触到它们时,它们会变色

我正在将它接触到的每个块的名称打印到控制台和屏幕上。我想让它显示最近被触摸的块

问题是总是漏掉一个街区。如果名称为以下颜色:

Red
Green
Blue
Pink
Yellow
输出总是R、G、B、Y——偶尔遗漏的输出会改变,通常是粉红色或蓝色

我使用的代码是:

function detectCollision(target) {

    target.setCoords();

    canvas.forEachObject(function(obj) {
        obj.setCoords();
        if (obj === target) return;
        if (obj != target && target.intersectsWithObject(obj)){

            obj.opacity = 0.5;
            console.log("Collision with Obj: " +obj.label);
            return obj;
        }else{
            obj.opacity = 1;
        }
    });
}
我看到了“was”,因为我尝试了其他各种方法,比如使用while循环,也使用数组,这样当一个对象被触摸时,它会被添加到数组中,然后对其执行检查,但结果仍然相同


这非常令人沮丧,我根本看不出问题出在哪里。非常感谢您的帮助。谢谢。

对于任何碰巧遇到此问题的人:


问题不在于循环、数组或任何方法。丢失的块位于另一个块下大约一个像素,intersect方法没有对此进行检查,因此跳过了它。由于我对它们的顺序所做的更改,丢失的块会不时更改。

如果出现奇怪的错误,我会将所有内容记录在console.log中。在这里,我会写“检测“+target.label”的冲突;在循环中:“+obj.label”测试;以及“发现与“+obj.label”相同;因此您最终可以看到发生了什么。我在控制台上打印了各种消息,请不要尝试解释发生了什么。最终解决了它,感谢您的建议:)