2015-12-03 2 views
0

Я готов полностью использовать AssetManager из Libgdx и всех его загрузчиков. Но у меня проблема с пониманием этой особой связи между Skin и TextureAtlas.TextureAtlas and Skin libgdx

Я хочу использовать способ JSON для создания скинов как можно больше.

В вики я могу прочитать:

Обратите внимание на JSON не описывает текстуру области, ninepatche шпагат, или другую информацию, которая поступает из атласа текстуры

На странице SkinLoader я читать следующее:

AssetLoader для экземпляров кожи. (1) Все текстуры и экземпляры BitmapFont будут загружаться как зависимости. Передача SkinLoader.SkinParameter позволяет указать (2) точное имя текстуры, связанной с указанным скином. В противном случае текстуру кожи просматривают так же, как с вызовом (3) Skin.Skin (com.badlogic.gdx.files.FileHandle). SkinLoader.SkinParameter также позволяет устанавливать именованные ресурсы, которые будут добавлены в скин перед загрузкой json-файла, что означает, что на них можно ссылаться из самого json-файла. Это полезно для динамических ресурсов, таких как BitmapFont, сгенерированный через FreeTypeFontGenerator.

Так вот, где мои мысли, когда я читаю это.

(1) Все текстуры. Они используют множественное число, поэтому я думаю, что они упоминают текстуру (как рисоваемую), которая может понадобиться для кнопки, например.

(2) Точное название текстуры. Так что теперь, может быть, они говорят об TextureAtlas, потому что SkinParameter как только два поля ресурсов и textureAtlasPath.

(3) Это, кажется, подтверждает (2)

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

Можете ли вы подтвердить, что я правильно понял это и что нет НИКАКОГО способа инициализации текстуры, которая будет использоваться в моей коже без TextureAtlas, но с простыми файлами png?

И если вы используете TexturePacker для создания моего файла пакета, очевидно, мне придется переупаковать все, когда я сделаю модификацию на одной из моих текстур, не так ли?

ответ

0

Кожа поддерживает использование отдельных текстур для ваших различных чертежей, но это неуклюже, потому что на самом деле это не то, что нужно делать. Что вы могли бы сделать, это создать TextureRegion вводимого коэффициента из текстур, и зарегистрировать их по имени с кожей, прежде чем говорить кожу, чтобы загрузить файл в формате JSON, например:

TextureRegionDrawable someButtonImage = new TextureRegionDrawable(
    new TextureRegion(someButtonTextureThatIsAlreadyLoaded)); 
Skin skin = new Skin(); //don't give it a json file yet 
skin.add("someButton", someButtonImage); 
skin.load(Gdx.files.internal("mySkin.json")); 

Теперь ваш Json может использовать «someButton», как значение для любого допустимого параметра в коже.

Но если вы используете AssetManager, вы можете сделать это, только если вы уже загрузили все необходимые текстуры за пределы AssetManager, чтобы вы могли передать их в SkinParameter SkinLoader как карту имен в TextureRegionDrawables.

В любом случае, вы бы набрали много кода, чтобы вручную загружать все эти текстуры, когда вы могли бы просто использовать атлас текстуры, который будет работать в любом случае. Вы можете настроить свою конфигурацию запуска в своей среде IDE, чтобы упаковать свой атлас для вас каждый раз, когда вы запускаете приложение, если вас беспокоит необходимость делать это каждый раз, когда вы меняете изображение на своем скине.

Исключение из всего вышеизложенного относится к BitmapFonts, которые не обязательно должны быть частью того же атласа, что и все остальное, чтобы вы могли загружать их исключительно из Json. Кожа рассматривает его как особый случай.

Во всяком случае, вот как я загружаю мою кожу вместе с атласом он использует для извлечения его вводимого коэффициента:

assetManager.load("mySkin.json", Skin.class, new SkinLoader.SkinParameter("myAtlas.atlas")); 
+0

Я не мог просить больше. Спасибо ! – Vanesbush

+0

Привет, Вы используете 'Gdx.files.internal ...', хотя вы используете loadManager для его загрузки? или я что-то упускаю? –

+0

@ MrCharli3 что вы получаете? Мои активы находятся во внутреннем пространстве. – Tenfour04

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