我的程序打包了一系列图像,并将它们输出为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 assets文件夹。(桌面链接到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
我也很好奇,为什么我要使用一个包,而不仅仅是图像,因为我从图像开始,然后打包,最后又得到了图像。
发布于 2013-03-21 09:06:30
**我的解决方案:**
使用"getTexture“返回整个图像,纹理区域基本上存储一个矩形,该矩形表示打包图像的返回,即单个图像。所以,基本上绘制TextureRegions和绘制纹理没有太大不同,所以我只绘制了TextureRegion。在我的例子中,这涉及到添加一个超类,以便它支持纹理和子类中的TextureRegions。子类指定是使用纹理还是使用布尔值的TextureRegions,并为每个子类调用不同的SpriteBatch.draw()方法。
至于为什么要使用上面的P.T.,如下所示:
地图集的全部要点是,您在其中查找的所有纹理都在“相同”纹理中,但在该纹理中的不同区域。这样你就可以在OpenGL中“绑定”一个大的纹理(这有点昂贵),然后从纹理中渲染出许多不同的部分。
Libgdx中接受纹理的大多数其他API也应该与TextureRegion一起工作。
因此,在我看来,它更有效/更快。
发布于 2013-03-21 08:38:05
不要在findRegion返回的TextureRegion上调用getTexture()。
地图集的全部意义在于,你在其中查找的所有纹理都在“相同的”纹理中,但在该纹理中的不同区域。这样你就可以在OpenGL中“绑定”一个大的纹理(这有点昂贵),然后从纹理中渲染出许多不同的部分。
Libgdx中接受Texture的大多数其他API也应该与TextureRegion一起工作。
https://stackoverflow.com/questions/15537347
复制相似问题