Ну, KineticJS имеет несколько функций пересечения:
intersects(point)
Kinetic.Shape#intersects
getAllIntersections(pos)
Kinetic.Container#getAllIntersections
getIntersection(pos)
Kinetic.Stage#getIntersection
Хотя getAllIntersections
, вероятно, является функцией вам нужно, похоже, автор KineticJS настоятельно рекомендует использовать getIntersection
IF возможно свыше getAllIntersections
. Это связано с тем, что getAllIntersections
имеет низкую производительность при вызове несколько раз подряд, что, вероятно, является проблемой для вас.
По моему опыту getIntersection
извлекает только один объект, который пересекает точку, и, кажется, возвращает только последний объект, добавленный на сцену, который пересекает точку! Я не уверен, как вы будете использовать это в своей ситуации.
Пользователь EliteOctagon написал собственную функцию обнаружения столкновений с лучшим успехом (и лучшей производительностью!): HTML5/kineticJS getIntersection function implementation Это может быть вашим лучшим выбором. Удачи!
О, и еще один небольшой наконечник на производительность: если вы пытаетесь выбрать формы, а не только «Прямоугольники», он будет работать лучше, если бы вы назвали все выбираемые формы того же имени, и использовать функцию .get()
по имени а не только .get("Rect")
.
Например:
new Kinetic.Rect({
name: "selectableShape"
});
new Kinetic.Ellipse({
name: "selectableShape"
});
var selectableShapes = stage.get(".selectableShape");
Спасибо за ответ. Я пришел к такому же выводу: 1. Текущая версия Kineticjs API не будет делать это очень хорошо, в будущих версиях могут появиться лучшие функции обнаружения столкновений. 2. Мне нужно придумать свой «алгоритм» Я решил рассчитать центр формы и проверить, находится ли он внутри областей выбора. Это будет сделано сейчас: http://jsfiddle.net/markusleth/FBjKY/ – user2553083
Хотелось бы, чтобы я знал, как добавить линейные тормоза. Двойное пространство не работает ... – user2553083