我正在将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;
        }
    });
}


我在尝试其他各种事情时看到了“是”,例如使用while循环以及使用数组,以便在触摸对象时将其添加到数组中,然后对其进行检查,但仍然相同结果。

这非常令人沮丧,我根本看不到问题出在哪里。任何帮助深表感谢。谢谢。

最佳答案

对于碰巧遇到的任何人:

问题不在于循环,数组或任何方法。丢失的块在另一个像素以下,并且相交方法未对此进行检查,因此被跳过。由于我对它们的顺序进行了更改,因此错过了不时更改的块。

关于javascript - 厄运碰撞循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21588650/

10-11 01:41
查看更多