Próbuję określić, kiedy fabric.Rect nakłada się na inną tkaninę.Sprawdź podczas obserwowania zdarzenia "object: moving", ale o niespójnych wynikach między fabric.Group a fabric.RectFabricwy przecinaWithObject powraca false, gdy Object jest fabric.Rect
Po przeniesieniu grupy przez instancję Rect metoda intersectsWithObject zwraca wartość true, ale gdy przenosisz instancję Rect na inną instancję klasy Rect, funkcja zwraca wartość false.
Zastanawiam się, czy robię coś złego tutaj.
Oto mój obsługi zdarzeń
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");
}
}
}
});
Utworzyłem skrzypce. Spróbuj wybrać dwa lub więcej bloków, aby je pogrupować. Zobaczysz, że zgrupowany obiekt zmienia kolor na czerwony, gdy zostanie przeciągnięty na inną instancję fabric.Rect lub fabric.Group. Po przeciągnięciu jeden Rect nad innym fabric.Object dowolnego typu, nigdy nie stanie się czerwony jak intersectsWithObject zawsze zwraca false ...
http://jsfiddle.net/cyberpantz/9MkYJ/27/
setCoords() robi to świetnie! – cincplug