2014-12-22 4 views
1

Как реализовать систему, которая берет лучшую текстуру на основе dpi из набора, как в SDK для Android, поскольку LibGDX является независимой от платформы и не может использовать уже существующую?Libgdx Выбор правильных текстур на основе DPI?

+0

Вы могли бы хотеть возьмите то, что вы разместили, и переделайте его в нечто более концентрированное. Представьте, что вы пишете письмо своему коллеге. Нам очень трудно прочитать параграфы и параграфы и выяснить, что вы хотите. Дайте пару фраз, объясните, что вам нужно, затем укажите свой вопрос явно. Таким образом, нам будет намного легче помочь вам. –

+0

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/assets/loaders/resolvers/ResolutionFileResolver.html – Xoppa

+0

Обработчик дескриптора разрешения - это не то, что я ищу ... Это занимает набор изображений на основе предопределенного разрешения, в то время как в android выделение выбирается на основе dpi ... Это большая разница – Andrew

ответ

3

Может быть, мое решение не лучшее, но я использовал его в реальном проекте, и это сработало.

В вашем использовании Game класса Gdx.graphics.getDensity() метод выбрать соответствующую папку, сохранить его имя в публичном поле и загружать свои активы:

public class MyGame extends Game { 

public static String folder; 
private AssetManager assets; 

@Override 
public void create() { 
    if (Gdx.graphics.getDensity < 1) { 
     folder = "lowDpiImages/"; 
    } else { 
     folder = "highDpiImages/"; 
    } 
    ... 
    assets = new AssetManager(); 
    assets.load(folder + "image.png", Texture.class, paramsNearest); 
    ... 
} 

Тогда в вас другие классы использовать имя папки, чтобы получить средства из AssetManager:

assets.get(MyGame.folder + "image.png", Texture.class); 

Вы можете написать более сложную папку выбора алгоритма причины ;-)

+0

Это очень полезно. Я только что реализовал это и, похоже, отлично работает. У меня есть еще один вопрос. Я экспериментировал с методом getDesnity, и я обнаружил, что моя плотность будет округлена. Например, при 213 dpi это будет 240 dpi, что означает 1,5 масштаба. Это нормально? – Andrew

+0

Это нормально. Откройте это [doc] (https://developer.android.com/reference/android/util/DisplayMetrics.html#density) и прочитайте о 'public float density' в' Fields'. Это значение возвращается методом getDensity() для бэкэнда Android в LibGDX. – Rara

Смежные вопросы