我正在将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/