0

我的程序打包了一系列图像并将它们输出到 aste.png 和 aste.atlas 中。我的打包代码如下:

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();
}

当我尝试 getTex(); 时,我将“sma_a2”作为 imgname 传递;

我的 assets/sprites/asteroids 目录有以下图片: big_a1.png big_a2.png med_a1.png med_a2.png sma_a1.png sma_a2.png 都成功打包到aste.png和aste.atlas

我的问题是,无论我在收到的图像中传递什么 fname 都是整个 aste.png

我也很好奇为什么我会使用包而不是图像,因为我从图像开始,然后打包它们,只是为了再次获取图像..



4

2 回答 2

4

Don't call getTexture() on the TextureRegion returned from findRegion.

The whole point of an atlas is that all of the textures you look up in it are in the "same" texture, but at different regions within that texture. This way you can "bind" one large texture in OpenGL (which is somewhat expensive) and then render lots of different pieces out of the texture.

Most of the other APIs in Libgdx that take a Texture should also work with a TextureRegion.

于 2013-03-21T00:38:05.150 回答
0

**我的解决方案:**

使用“getTexture”返回整个图像,纹理区域基本上存储一个矩形,该矩形表示作为单个图像的打包图像的区域。所以,基本上画TextureRegions和画Textures没有太大区别,所以我只画了TextureRegion。就我而言,这涉及添加到超类,以便它支持子类中的纹理和纹理区域。子类使用布尔值指定是使用 Textures 还是 TextureRegions,并且为每个子类调用不同的 SpriteBatch.draw() 方法。

至于为什么要使用上面贴的PT如下:

地图集的全部意义在于,您在其中查找的所有纹理都位于“相同”纹理中,但位于该纹理内的不同区域。这样,您可以在 OpenGL 中“绑定”一个大纹理(这有点昂贵),然后从纹理中渲染出许多不同的部分。

Libgdx 中大多数采用 Texture 的其他 API 也应该适用于 TextureRegion。

所以在我看来它更有效/更快。

于 2013-03-21T01:06:29.657 回答