LibGDX:使用相同的TextureAtlas两次或使用两个不同的TextureAtlases

时间:2015-04-28 17:41:26

标签: java libgdx

我将原生Android游戏迁移到libGDX。这就是我使用翻转图形的原因。显然NinePatch不能被翻转。 (它们是不可见的或look strange。)

什么会更有效:

  • 使用一个包含所有图形文件的大TextureAtlas并加载两次(翻转和解压缩)或
  • 对于翻转的图形文件使用一个大的TextureAtlas,为NinePatch图形使用第二个小的一个?

A型:

public static TextureAtlas atlas, atlas2;

public static void load() {
    // big atlas (1024 x 1024)
    atlas = new TextureAtlas(Gdx.files.internal("game.atlas"), true); 
    // find many AtlasRegions here

    // Same TextureAtlas. Loaded into memory twice?
    atlas2 = new TextureAtlas(Gdx.files.internal("game.atlas"), false);
    button = ninepatch.createPatch("button");
    dialog = ninepatch.createPatch("dialog");
}

B型:

public static TextureAtlas atlas, ninepatch;

public static void load() {
    // big atlas (1024 x 1024)
    atlas = new TextureAtlas(Gdx.files.internal("game.atlas"), true); 
    // find many AtlasRegions here

    // small atlas (128 x 64)
    ninepatch = new TextureAtlas(Gdx.files.internal("ninepatch.atlas"), false); 
    button = ninepatch.createPatch("button");
    dialog = ninepatch.createPatch("dialog");
}

1 个答案:

答案 0 :(得分:0)

现在我没时间测试,我阐述了这个想法,但我认为它可以工作,基于纹理而不是纹理图集以简化。

short metadata = 2;

Texture yourTextureMetadata = new Texture(Gdx.files.internal(metaDataTexture));

int width  = yourTextureMetadata.getWidth()   - metadata;
int height = yourTextureMetadata.getHeight()  - metadata;

TextureRegion yourTextureClean = new TextureRegion(yourTextureMetadata, 
                                             1, 1, width, height);

我假设元数据大小为2,现在我不记得了,抱歉

这个想法会采用最大的纹理,带有元数据然后将它们切割成另一边的干净,以便你可以转身,我希望能够工作。

对于texturealtas类似,findRegions和cut metadata并保存它们没有元数据

另一方面,请注意你有静态纹理,我认为当android更改上下文,你的应用程序到另一个应用程序,然后回到你的应用程序,你可以给出错误可视化,你的图像可以黑色显示