Я пытаюсь определить, когда ткань.Rect перекрывает другую ткань.Rect, наблюдая за событием «object:moving», но имея противоречивые результаты между тканью.Group и тканью.Rect
Когда я перемещаю группу над экземпляром Rect, метод intersectsWithObject возвращает true, но когда я перемещаю экземпляр Rect над другим экземпляром Rect, он возвращает false.
Мне интересно, если я делаю что-то неправильно здесь.
Вот мой обработчик событий
cvs.observe('object:moving', function(e) {
var targ = e.target;
// filter out itself
var items = cvs.getObjects().filter(function(o){
return targ !== o;
});
var hit = false;
for (var i = 0, n = items.length; i < n; i++) {
var m = items[i];
if (targ.type == "group") {
if (targ.intersectsWithObject(m)) {
targ.setFill("red");
hit = true;
console.log("GROUP HIT");
} else {
if (!hit) {
targ.setFill("#CCCCCC");
}
}
}
else {
// this is always returning false! why?
if (targ.intersectsWithObject(m)) {
var id = m.data ? m.data.entityId : " ??"
console.log("OBJECT HIT:" + id);
targ.setFill("red");
}
}
}
});
Я создал скрипку. Попробуйте выбрать два или более блоков, чтобы сгруппировать их. Вы увидите, что сгруппированный объект становится красным, когда его перетаскивают поверх любого другого экземпляра Fabric.Rect или Fabric.Group. Когда вы перетаскиваете один объект Rect поверх другого объекта Fabric.Object любого типа, он никогда не становится красным, поскольку intersectsWithObject всегда возвращает false...