2013-03-21 1 views
0

Моя программа представляет собой серию изображений и выводит их в aste.png и aste.atlas. Мой код для упаковки заключается в следующем:TexturePacking with Libgdx -

public void pack(){ 
    System.out.println("Packing should not be ordinarily called! If you did not have explicit intentions of Packing, please check ImageAtlas constructor."); 
    Settings settings = new Settings(); 
    settings.maxWidth = 512; 
    settings.maxHeight = 512; 
    TexturePacker2.process(settings, "E:/Files/Eclipse Projects/StarFighters/StarFighters-android/assets/sprites/" + name, 
      "E:/Files/Eclipse Projects/StarFighters/StarFighters-android/assets/sprites/", name.substring(0,4)); 
} 

мне не нужно упаковать КАЖДЫЙ раз, когда я запустить программу, поэтому я могу уйти с абсолютными путями к файлам (я соберу только тогда, когда я бег рабочего стола и добавили новые изображения), однако я использовал только абсолютные пути к файлу, потому что не могу понять, как это сделать в противном случае. Я использую папку ресурсов Android. (Рабочий стол связан с папкой ресурсов Android.) Поскольку я запускаю его из настольной версии, он пытается перейти на рабочий стол, когда мне нужно, чтобы он использовал путь к ресурсам, который для меня используется Gdx.files.internal. (Эта проблема не существенна для функции моей программы)

После того, как я уложил изображения я делаю следующим образом:

atlas = new TextureAtlas(Gdx.files.internal("sprites/aste.atlas")); 
public Texture getTex(String imgname){ 
    return atlas.findRegion(imgname).getTexture(); 
} 

переходит в «sma_a2» как imgname, когда я пробую и getTex ();

мой каталог активов/спрайты/астероиды имеет следующие изображения: big_a1.png big_a2.png med_a1.png med_a2.png sma_a1.png sma_a2.png Какие были успешно упакованы в Асте. PNG и aste.atlas

Моя проблема не в том, независимо от того, что Fname я прохожу в образе я получаю это весь aste.png

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



ответ

0

** Моего решение: **

Использование «getTexture» возвращает все изображение и текстура регионы магазин в основном прямоугольник, который представляет собой regoin упакованного образа, который является индивидуальным образом. Таким образом, в основном рисование TextureRegions не сильно отличается от рисования Textures, поэтому я просто рисовал TextureRegion. В моем случае это связано с добавлением в суперкласс, чтобы он поддерживал Textures и TextureRegions в подклассах. В подклассах указывалось, следует ли использовать Textures или TextureRegions с помощью логического, и для каждого вызывались разные методы SpriteBatch.draw().

Что касается использования ими P.T.размещено выше, следующим образом:

Всего смысл атлас, что все текстур вы смотрите в он находится в «же» текстуре, но в разных регионах в пределах этой текстуры. Таким образом, вы можете «привязать» одну большую текстуру в OpenGL (которая является несколько дорогой), а затем отобразить много разных частей из текстуры.

Большинство других API в Libgdx, которые используют текстуру, также должны работать с с TextureRegion.

Так звучит для меня, как будто это более эффектно/быстрее.

4

Не называйте getTexture() на TextureRegion вернулся из findRegion.

Весь смысл атласа заключается в том, что все текстуры, которые вы просматриваете в нем, находятся в «той же» текстуре, но в разных областях внутри этой текстуры. Таким образом, вы можете «привязать» одну большую текстуру в OpenGL (что несколько дорого), а затем отобразить много разных фрагментов из текстуры.

Большинство других API в Libgdx, которые принимают Texture, также должны работать с TextureRegion.

+0

Итак, как я могу использовать область текстуры? – csga5000

+0

У меня есть 2 класса (астероид и космический корабль), в одном классе используется простая текстура, а астероид использует textureatlas. Эти классы разделяют родителей, поэтому при рисовании этих объектов используется «getTex», и он возвращает текстуру. Я не уверен, как мне с этим справиться. – csga5000

+0

Я думаю, что я собираюсь добавить логическое значение для использованияTexRegion, а затем моя программа также получит getTexRegion, который будет вызываться, если это логическое значение false. – csga5000