Я заметил, что для камеры перспективы и трехмерных фигур setTranslate() можно использовать по оси Z. Значит ли это, что мы используем этот метод для управления трехмерными плоскостями, а setLayout() для двухмерных плоскостей?
Кажется, что оба перемещают координаты моих объектов в трехмерной плоскости, так есть ли причина не использовать их взаимозаменяемо (кроме того, что это, возможно, плохая практика)?
Свойства макета и свойства Translate имеют разное применение и назначение, хотя оба они используются для позиционирования узлов. Их можно использовать по отдельности или, иногда, вместе.
Свойства перевода обычно используются для:
ИЛИ
На translateX
есть свойства translateY
, translateZ
и Node
. Таким образом, свойства перевода можно использовать для перевода узлов как в 2D, так и в 3D пространстве.
Свойства макета обычно используются для:
Pane
или AnchorPane
) или неуправляемы.ИЛИ
setLayout
.Если вы используете 2D-панель макета, которая управляет макетом своих дочерних элементов (например, StackPane
, HBox
, VBox
), то обычно вы не устанавливаете значения макета явно в своем коде. Вместо этого вы позволите панели макета управлять макетом и устанавливать значения макета.
Если вы попытались установить значения макета самостоятельно, а затем добавить узел в управляемую панель макета, панель макета просто перезапишет все установленные вами значения при следующем запуске этапа макета. Например, StackPane без дополнительных ограничений гарантирует, что все его дочерние элементы будут расположены в центре панели, независимо от того, какие значения макета вы пытаетесь установить на узле.
Для Node
нет свойства LayoutZ, есть только layoutX
и layoutY
. Поэтому определение менеджера 3D-компоновки для размещения узлов в 3D-пространстве не поддерживается.
В 3D-работе все узлы обычно помещаются в группу и позиционируются с использованием перемещения, а не макета.
В 2D-работе узлы обычно размещаются на панелях макета, которые будут управлять макетом без необходимости корректировки значения перемещения. Но перевод все равно может использоваться в некоторых приложениях, например, при работе с анимацией. Например, выполнение эффекта отскока в элементе управления типа док-станции Mac. Значок активированного приложения подпрыгивает вверх и вниз, но расположение других значков в панели управления док-станцией не меняется. После завершения эффекта отскока значок активированного приложения возвращается в исходное положение в доке.
Значения перевода не влияют на значения макета для узла, а панели макета не учитывают их при расчете положения макета для узлов, которыми они управляют, поэтому эффект отскока с использованием перевода не повлияет на макет любого другого одноуровневые узлы на панели и узел, подвергающийся эффекту анимации, вернутся в исходное положение макета, как только значения перевода вернутся к нулю.
В 2D-работе компоновка и перемещение могут использоваться независимо или вместе, поскольку окончательное положение узла рассчитывается как компоновка + перемещение.
Вы по-прежнему можете использовать макет в 3D, хотя это будет менее распространено. Вы можете использовать его для размещения узлов на 2D-поверхности, положение которой перемещается в 3D. Например, если вы реализуете пользовательский интерфейс 3D VR и хотите показать пользователю диалоговое окно с информационным текстом и кнопками «Подтвердить» и «Отмена», вы можете разместить диалоговое окно в 2D на панели макета, а затем поместить диалоговое окно в группу. и найдите его в трехмерном пространстве с помощью перевода.
Анимации перехода, такие как TranslateTransition и PathTransition, работают путем изменения значений перевода, а не значений макета, поэтому их можно использовать как в 2D, так и в 3D.
Такие преобразования, как Перевести и Повернуть , также можно использовать как в 2D, так и в 3D. Преобразования применяются независимо от свойств перевода и макета, при этом алгоритм, описанный в документации узла, следующий:
Камеры, такие как PerspectiveCamera, являются узлами, но к ним имеет смысл применять только перемещения, повороты и преобразования, а не макет.