我正在使用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循环和使用数组,这样当一个对象被触摸时,它被添加到数组中,然后对它执行检查,但是结果仍然相同。
非常令人沮丧,我根本看不出问题所在。任何帮助都非常感谢。感谢。
答案 0 :(得分:1)
对于遇到此事的任何人:
问题不在于循环,数组或任何方法。被错过的块在另一个像素左右的情况下,并且交叉方法没有对此进行检查,因此它被跳过了。由于我对他们的顺序所做的改变,被错过的区块不时发生变化。