厄运的碰撞循环

时间:2014-02-05 21:14:28

标签: javascript arrays canvas collision-detection fabricjs

我正在使用Fabric和JS来处理我正在进行的项目。 Fabric将画布中的对象建模为数组。

我有一个碰撞检测方法,它遍历画布数组并确定何时检测到与新对象的碰撞。检测功能正常。我基本上在他的屏幕上有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;
        }
    });
}

我看到“是”,因为我尝试了各种其他的东西,比如使用while循环和使用数组,这样当一个对象被触摸时,它被添加到数组中,然后对它执行检查,但是结果仍然相同。

非常令人沮丧,我根本看不出问题所在。任何帮助都非常感谢。感谢。

1 个答案:

答案 0 :(得分:1)

对于遇到此事的任何人:

问题不在于循环,数组或任何方法。被错过的块在另一个像素左右的情况下,并且交叉方法没有对此进行检查,因此它被跳过了。由于我对他们的顺序所做的改变,被错过的区块不时发生变化。