Libgdx упаковывает NinePatch в TextureAtlas

Я видел, что вы можете упаковать NinePatchв TextureAtlas используя TexturePacker2, Я также видел это и это. Но я не уверен, правильно ли понял. Я хочу упаковать все свои GUI-вещи в один TextureAtlas и мой GUI-материал не только сделан из NinePatchс, но и некоторых TextureRegions. Можно ли совместить NinePatchс и TextureRegionв одном TextureAtlas? Могу ли я использовать настройки по умолчанию или мне нужно сделать некоторые пользовательские настройки, такие как paddingX, paddingY в .JSON файл? И в моей игре я могу загрузить NinePatch используя atlas.createPatch("patchimagename"); или было бы лучше сохранить все как TextureRegionи создать NinePatch из этого?

1 ответ

Решение

Представим, что у вас есть структура файлов, которую вы используете для TexturePacker2:

images/
  image1.png
  image2-ninepatch.png   <-- this is NinePatch
  image3.png

Просто измените свое расширение NinePatch файлы из .png (например) для .9.png (и добавьте границу 1px к этому, если необходимо).

images/
  ...
  image2-ninepatch.9.png
  ...

После этого вы можете использовать Skin обернуть ваши текстуры и легко извлечь NinePatch а также TextureRegion от Atlas:

TextureAtlas atlas = ... // load the Atlas
Skin skin = ... // create some root skin or use created one
skin.addRegion(atlas); // register atlas in skin

Кроме того, вы можете добавить много атласов к одному скину!

Теперь вы можете сделать это:

  1. Получить TextureRegion по имени:

    public TextureRegion getRegion(String region)
    {
        return skin.getRegion(region);
    }
    
  2. Получить NinePatch по имени:

    public NinePatch getNinePatch(String region)
    {
        return skin.getPatch(region);
    }
    
  3. Даже использовать ваши изображения (TextureRegion или же NinePatch) в ваших компонентах пользовательского интерфейса (например, фон кнопки и т. д.), которые используют этот скин.

Я надеюсь, что это поможет вам!

Другие вопросы по тегам