Точка привязки x, y в узлах JavaFX

Некоторые приложения для спрайтов (а именно pulpcore) позволяют определить точку привязки для объекта.

Например, если точка привязки прямоугольника равна 0,0, а ее координаты равны x:0,y:0, верхняя левая точка прямоугольника будет отображаться в верхней левой точке экрана.

Однако, если точка привязки прямоугольника равна 50,50, а его размер равен 100x100, середина прямоугольника будет помещена в 0,0, и будет отображаться только его нижняя правая часть.

Есть ли подобное свойство в JavaFX? Есть ли простой способ реализовать это (можете ли вы привязать координаты x и y узла JavaFX к его собственной высоте и ширине?)?

Когда я привязываю координаты x,y к boundsInLocal/Parent.width, я получаю исключение во время выполнения.


person Elazar Leibovich    schedule 24.08.2009    source источник


Ответы (1)


Как вы говорите, начало координат для прямоугольника находится вверху слева. У вас есть 2 варианта размещения узла. Вы можете использовать как layoutX, так и layoutY. var rect = прямоугольник { layoutX: 50 layoutY: 50 ширина: 100 высота: 100 }

или перевестиX и перевестиY

var rect = Rectangle { translateX: 50 translateY: 50 widht: 100 height: 100 } Основная цель использования как layoutX/Y, так и translateX/Y заключается в том, что translateX/Y предназначен для изменения, тогда как layoutX/Y предназначен для начального позиционирование. Например, вы можете изменить translateX/Y в анимации, в то время как исходное положение запоминается в layoutX/Y. Конечным местоположением всегда будет layoutX+translateX и layoutY+translateY.

Чтобы сместить начало координат в центральную точку (50,50), используйте отрицательный сдвиг. var rect = прямоугольник { translateX: -50 translateY: -50 ширина: 100 высота: 100 }

Некоторые фигуры не основаны на верхнем левом начале. Например, Circle использует centerX и centerY.

person JimClarke    schedule 25.08.2009
comment
Не достаточно хорошо. Я хочу привязать X, Y к ширине текущего узла. - person Elazar Leibovich; 26.08.2009
comment
поэтому вы можете сделать: var rect: Rectangle = Rectangle{ x: bind rect.width y: bind rect.height }; или предпочтительно var rect: Rectangle = Rectangle{ layoutX: bind rect.width layoutY: bind rect.height }; - person JimClarke; 26.08.2009
comment
Извините, я забыл, x и y были удалены из Node. Вы должны использовать layoutX/Y или translateX/Y. Таким образом, вы можете сделать Rectangle { layoutX: bind rect.layoutBounds.width }. - person JimClarke; 26.08.2009