Как сделать независимым разрешение / плотность игры libGDX? Есть ли способ указать размеры изображения как «абсолютные» независимо от базовой плотности?
Я делаю очень простую детскую игру; просто набор спрайтов, отображаемых на экране, и некоторый текст для меню (меню опций в первую очередь). Что я хочу знать, так это: как сделать независимым разрешение спрайтов / шрифтов? (Я обернул их в своих собственных классах, чтобы сделать вещи проще.)
Так как это простая детская игра, мне не нужно беспокоиться об «игровой зоне» игры; Я хочу использовать как можно больше места на экране.
То, что я сейчас делаю, что кажется очень неправильным, - это просто создавать изображения, подходящие для больших разрешений, а затем уменьшать (или редко), чтобы соответствовать размеру экрана. Кажется, это работает нормально (в настольной версии), даже с линейным отображением на моих текстурах, но меньшие разрешения выглядят ужасно.
Кроме того, это, кажется, идет вразрез с «независимыми от устройства пикселями» Android (DP). Или, может быть, я что-то упускаю и libGDX уже как-то об этом заботится?
Какой лучший способ справиться с этим? Я нашел эту ссылку; это хороший способ решения проблемы ?: http://www.dandeliongamestudio.com/2011/09/12/android-fragmentation-density-independent-pixel-dip/
В нем упоминается, как управлять изображениями, но не упоминается, как указывать размеры шрифта / изображения независимо от плотности.
Ответы:
Поскольку вы можете читать плотность устройства и отображать шрифты во время выполнения в libgdx, я использую это решение для достижения независимого от плотности размера шрифта:
источник
Чтобы добиться этого в libgdx, вы можете использовать «orthographicCamera» там, где вы назначаете размер, который вы хотите использовать, и в каждом разрешении вы можете видеть все ваши изображения, масштабированные до этого размера (я использую 800X480, потому что это больший экран в Android ) и это хорошо работает :)
источник
Я считаю, что Android-«пиксели, не зависящие от устройства» - это всего лишь измерительная палочка для классификации устройств, и на самом деле они недоступны в качестве визуализируемых пикселей. Таким образом, вы не пропустите ни одной волшебной инфраструктуры, решающей DPI. Насколько я понимаю современное состояние, вы обнаружили все варианты. Существует два основных подхода к работе с разными устройствами:
Конечно, вы можете сделать несколько из этих двух сочетаний (выбрать примерно точное изображение и затем масштабировать его), или использовать разные подходы для различных элементов вашего интерфейса (например, ранее существующие изображения для шрифтов / текста и динамическое масштабирование для игрового процесса). спрайты).
То, что пытается сделать ваша конкретная игра, действительно может изменить то, какой подход имеет больше смысла. Например, если у вас есть экранное меню, вам нужно убедиться, что кнопки несколько кратны размеру кончика пальца (поэтому кнопку всегда легко нажимать, но она не больше, чем необходимо для большие устройства, такие как планшеты). В качестве альтернативы, если вы пытаетесь создать игру-головоломку, в которой вы хотите убедиться, что вся головоломка видна сразу, вам нужно масштабировать элементы так, чтобы они помещались на экране (например, с крестиками-ноликами) Возможно, вы захотите, чтобы каждый элемент занимал примерно 1/3 экрана).
Я думаю, что для таких вещей, как шрифты, которые содержат много мелких деталей, вам нужно иметь множество предварительно отрисованных изображений с текстом, а затем выбирать наиболее подходящие. Таким образом, кнопки могут менять свою относительную форму / размер с одного устройства на другое, но, как правило, всегда будут выглядеть красиво.
Посетите Mario Zerchner's Beginning для Android для обсуждения проблем и некоторых решений. Обратите внимание, что Марио является автором libGDX, поэтому подход к книге отражает библиотеку libGDX (обратите внимание, что они не один к одному, книга посвящена написанию библиотеки, похожей на libGDX, но не самой libGDX).
источник
Один из способов сделать это - определить минимальное соотношение сторон и максимальное соотношение сторон для вашей игры. Это будут соотношения, которые вы хотите поддерживать. Затем вам нужно использовать Viewport, который теперь предоставляется в libGdx. Окно просмотра будет масштабировать ваш мир в соответствии с вашими настройками.
Существует несколько типов видовых экранов, и вам нужно выбрать тот, который наиболее подходит для вашей игры.
Например, вы можете использовать ExtendViewport и фиксировать свою высоту или ширину и вычислять другое. Затем вам нужно убедиться, что вся графика видна с минимальным соотношением сторон. Расширенный видовой экран будет масштабировать вашу графику до правильного соотношения сторон без искажения графики. Однако ExtendViewport работает, добавляя дополнительное пространство в ваш мир, поэтому вы также должны предоставить графику для фонов, например, охватывающую весь ваш охват охватываемых соотношений сторон, когда мир меньше вашего максимального соотношения сторон, дополнительная часть графики не будет быть показано.
источник