intersectsWithObject() не работает с объектами в группах

У меня есть холст Fabric.js с группой фигур на нем («токен») и прямоугольник, на который я собираюсь перетащить токен («платформа»). Перетаскивание токена на платформу приведет к различным событиям.

Когда я звоню token.intersectsWithObject(platform), все работает отлично. Но у меня будет несколько платформ для перетаскивания токенов, и я хочу повысить точность взаимодействия перетаскивания, поэтому я решил, что при проверке на столкновение я хочу учитывать только основание жетон, а не все.

Это не должно быть слишком сложно, так как основание жетона представляет собой фигуру. Все, что мне нужно сделать, это сохранить ссылку на эту фигуру в token.base и вызвать token.base.intersectsWithObject(platform).

Но почему-то это не работает. token.base.intersectsWithObject() существует, но всегда возвращает false. Я не могу понять, почему. Кто-нибудь может помочь? Вот CodePen; щелкните переключатель в верхней части JavaScript, чтобы переключить соответствующую логику между token и token.base.


person DawnPaladin    schedule 20.05.2015    source источник


Ответы (1)


Объект base находится в группе. Его координаты не меняются, потому что он находится в группе. Если вы сделаете запись в консоли, то увидите, что координаты группы меняются, а координаты объекта внутри группы не меняются. Так что теоретически объект base не пересекается с platform.

console.log('Left margin of group =', fred.getLeft());
console.log('Top margin of group =', fred.getTop());
console.log('Left margin of base =', fred.base.getLeft());
console.log('Top margin of base =', fred.base.getTop());

CodePen

person Khawer Zeshan    schedule 21.05.2015
comment
Спасибо, это очень полезно. На основе вашего анализа я создал пользовательскую версию intersectsWithObject()функции, которая вычисляла координаты base и сделал пересечение с ним вместо группы. - person DawnPaladin; 21.05.2015