libgdx
Поддержка множественных разрешений
Поиск…
Видовые
Для поддержки нескольких разрешений и пропорций Libgdx использует так называемые Viewports
.
Существует несколько типов Viewports
которые используют разные стратегии для обработки нескольких разрешений и пропорций.
Viewport
использует Camera
под капотом и управляет ее viewportHeight
и viewportWidth
. Вы можете опционально предоставить Viewport
a Camera
в своем конструкторе, иначе он будет использовать OrthographicCamera
по умолчанию:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new PerspectiveCamera();
viewport = new FitViewport(8f, 4.8f, camera);
}
Кроме того, вы должны указать worldWidth
и worldHeight
для конструктора viewport. Это пространство будет представлять собой виртуальную систему координат, которую вы будете использовать для указания позиции объекта и размеров. Например, преобразование видового экрана, которое может быть применено к SpriteBatch, автоматически позаботится о преобразовании логических координат в фактические координаты экрана таким образом, который соответствует фактическому типу видового экрана, который вы используете. Например, при использовании орфографической проекции (по умолчанию используется OrthographicCamera
): если ваш размер мира составляет 12,8 на 7,8 метра, а экран вашего устройства - 2560x1560 пикселей, тогда ваш мир будет динамически проецироваться с 200 пикселями на метр.
При изменении размера Viewport
(например, если меняется ориентация экрана смартфона), вам необходимо сообщить об этом Viewport
экране. он автоматически обновит Camera
viewportHeight
и viewportWidth
:
public void resize(int width, int height) {
viewport.update(width, height);
}
Viewport
также управляет OpenGL Viewport
и, при необходимости, изменяет область рисования.
Viewport
s также заботится о преобразовании координаты экрана в координаты игры, что особенно важно для выбора:
private Vector2 worldPos = new Vector2();
public boolean touchDown (int x, int y, int pointer, int button) {
worldPos.set(x, y);
viewport.unproject(worldPos);
processPicking(worldPos);
}
Встроенные видовые экраны
Есть несколько встроенных видовых экранов, каждый из которых делает разные вещи. Вот список имен и их описания:
Имя видового экрана | Описание |
---|---|
StretchViewport | Будет растягивать экран. Нет черных полос, но соотношение сторон может быть отключено. |
FitViewport | Будет максимальный размер, основанный на соотношении сторон. Могут быть черные полосы. |
FillViewport | Совсем так же, как FitVieport, но всегда заполняет весь экран. |
ScreenViewport | Всегда заполняет весь экран, но не изменяет размер всех детей. |
ExtendedViewport | Сохраняет соотношение сторон мира без черных полос, расширяя мир в одном направлении |
CustomViewport | Пользовательский запрограммированный Viewport. Может иметь черные полосы и может поддерживать соотношение сторон. |
Пользовательские видовые экраны
Вы можете создать свой собственный пользовательский видовой экран. Он может иметь черные полосы, и он может или не может поддерживать соотношение сторон, в зависимости от того, как вы его программируете. Пользовательский видовой экран будет выглядеть примерно так:
public class Tutorial extends Viewport
. Вам нужно будет переопределить update(width, height)
, но это все.
Другая попытка - расширить общий ScalingViewport
и предоставить другое масштабирование, которое еще не было предоставлено. Предположим, вы установили его в Scaling.none
. Это будет выглядеть примерно так: Если вам нужна какая-то ссылка, вы можете найти встроенные классы видового экрана прямо здесь .
StretchViewport
StretchViewport
- это тип Viewport
, который поддерживает размер виртуального экрана.
Это позволяет определить фиксированную (независимую от разрешения) ширину и высоту.
StretchViewport
, как следует из названия, растягивает виртуальный экран, если отношение виртуального изображения не соответствует реальному соотношению сторон. OpenGL Viewport не будет изменен, и черные полосы не появятся.
Использование:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new OrthographicCamera();
viewport = new StretchViewport(80, 48, camera);
}
public void resize(int width, int height) {
viewport.update(width, height);
}
FitViewport
FitViewports - это видовые экраны, которые всегда поддерживают соотношение сторон. Он делает это, создавая черные полосы на краях, где осталось пространство. Это один из наиболее часто используемых видовых экранов.
Использование:
private Viewport viewport;
private Camera camera;
public void create() {
camera = new OrthographicCamera();
viewport = new FitViewport(80, 48, camera);
}
public void resize(int width, int height) {
viewport.update(width, height);
}