Libgdx Hud с двумя этапами

У меня есть приложение, которое в настоящее время работает с одним этапом, но мне нужно добавить боковой дисплей / секцию в качестве HUD с оценками / жизнями и т. Д., Так что HUD находится слева, а основной экран справа , Основной игровой экран будет зафиксирован и не будет перемещаться.

Из исследования я нашел пару решений.

1 – два этапа 2 – группа с двумя группами к ней, возможно, с использованием горизонтальной группы 3 – две камеры одной ступени 4 – одна ступень, одна камера, но изменение положения камеры для каждого набора участников.

Я думаю, вариант 1 – это мое предпочтение, но у меня есть некоторые вопросы.

  • Всегда ли заполняют все этапы всего экрана, или я могу начать тогда, где я хочу? Это облегчило бы для экрана правой руки вычислять позиции на основе 0,0 этого экрана, а не всегда добавлять ширину HUD для любых вычислений.
  • Нужно ли мне работать с видовыми экранами? В настоящее время я не использую один (который, я думаю, означает, что мой этап установлен на масштабирование по умолчанию), но ничто не выглядит растянутым в результате этого. Я мало знаю о видовых экранах, но всегда есть компромисс с ними, т. Е. Черные полосы сверху или сбоку.
  • Если у меня есть два этапа, у каждого из них есть собственная камера? Нужно ли мне об этом? Могу ли я направить правую камеру на смещение, поэтому я все еще могу рисовать вещи от 0,0, а нижний левый угол правой ступени, а не весь экран?

Наконец, вне темы, я немного запутался в spritebatch. В настоящее время я его не использую, потому что я использую сцену. Это нормально, или я все равно буду использовать его вместе со сценой? И добавить к этому всех моих актеров?

    Это я правильно понял, вы используете scene2d для игрового мира, а также для вашего HUD. И HUD не накладывает игровой мир, а использует исключительно свою часть экрана.

    Этапы не всегда заполняют весь экран. У них нет понятия заполнять или ничего не заполнять, потому что они могут иметь объекты, которые вытягиваются из экрана. Тем не менее, они привязаны к прямоугольнику, определенному их Видовым окном.

    В вашем случае, похоже, вам нужны два видовых экрана, и, следовательно, два этапа. Вы говорите, что не используете Viewport, но вы … Этап автоматически создает собственный ScalingViewport, который настроен как StretchViewport. (ScalingViewport не упоминается в документации, которая устарела.) StretchViewport обычно плохо, потому что ваша игра будет искажена, чтобы соответствовать любому соотношению сторон устройства.

    ExtendViewports не вызывают черные полосы, если вы не устанавливаете максимальную ширину / высоту на них, и я думаю, что это лучший выбор для любого игрового мира.

    Вы можете настроить два видовых экрана для охвата определенных частей экрана, которые вы рассчитываете сами. Поскольку это специализированный случай, я думаю, вам придется напрямую подклассифицировать класс Viewport (не один из его подклассов) и манипулировать каждым из них с помощью viewport.setScreenBounds(...) .

    Что касается вашего последнего вопроса: да, каждый из двух этапов имеет свой собственный Viewport, и у каждого видового экрана есть собственная камера. После того, как вы настроите два видовых экрана для каждого из них, у вас есть собственная часть экрана, вы также можете настроить их для обработки их соответствующих нижних левых углов как 0,0.