ИСПРАВЛЕНИЕ К МОЕМУ НАЧАЛЬНОМУ ОПИСАНИЮ: Я сказал, что прямоугольник границ объектов эллипса не улавливает события мыши нижележащих / перекрывающихся объектов. НЕПРАВИЛЬНО. Они ДЕЛАЮТ и представляют ту же проблему, что и Треугольники (я полагаю сейчас, как и все дочерние объекты javaFX Shape).
*********** Мое грязное решение *************
Я нашел грязное, но в основном работоспособное решение этой проблемы, по-видимому, созданное всеми дочерними объектами javaFX Shape. Эта проблема вызвана тем, что прямоугольник границ объекта Shape перехватывает события мыши нижележащих / перекрывающихся объектов ... Я не могу запустить событие мыши Code для ограничения ТОЛЬКО фигуры, хотя перекрывающиеся объекты по-прежнему должны быть кликабельными:
1) Внутри треугольника обработчик события onMousedPressed:
ПРОВЕРЬТЕ, если пользователь нажал на кнопку OutsideTriangle-but-InsideTriangleRectBounds:
(используйте алгоритм барицентрического стиля ... многие из них доступны в stackOverflow)
static boolean isInside(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3) {
double L1 = (x-x1)*(y3-y1) - (x3-x1)*(y-y1),
L2 = (x-x2)*(y1-y2) - (x1-x2)*(y-y2),
L3 = (x-x3)*(y2-y3) - (x2-x3)*(y-y3);
return (L1>0 && L2>0 && L3>0) || (L1<0 && L2<0 && L3<0);
}
isInTriangle = isInside (t.getX(), t.getY(),
triBottomLeftX, triBottomLeftY,
triBottomRightX, triBottomRightY,
triTopX, triTopY);
2) Если значение выше TRUE, установите для флага isClickedOutsideTriangle значение TRUE, затем обработчик события выхода / возврата БЕЗ потребляющего события.
3) Флаг TEST isClickedOutsideTriangle в начале внутреннего обработчика события onMousedDragged. Если это правда, выход / возврат из обработчика, без потребления ().
4) Внутри треугольника обработчик события onMousedReleased:
-TEST если треугольник bounds-rectangle пересекает любые элементы игрового поля.
Если да:
[чтобы сохранить указанный пользователем zIndex игровых фигур]
-Сохранить все значения элемента zIndex.
-SORT Элемент zIndex значения по возрастанию
-SET отсортированное значение Elements toFront () [теперь это позволяет всем элементам быть активными]
5) Если флаг isClickedOutsideTriangle имеет значение ИСТИНА, сбросьте его на ЛОЖЬ.
ПРЕДУПРЕЖДЕНИЕ:
К сожалению, побочным эффектом этого решения является:
Пользователям никогда не разрешат перекрывать треугольники другими игровыми элементами,
но другие элементы игры могут перекрывать треугольники!
Я все еще ищу более простое решение, использующее свойства / методы объекта javaFX,
это позволит: 1) полную кликабельность элементов, лежащих в основе Shape-object bounds-rectangle & 2) динамическое изменение размеров Shapes, определяемое форматированием пользователем во время игры ?????