android游戏开发框架libgdx的使用(十六)—使用TexturePacker工具加快开发速度

转载声明:http://www.cnblogs.com/htynkn/archive/2012/01/19/libgdx_16.html

libgdx绝对是一个相当不错的游戏引擎,最近一段时间的学习我感觉收获很多。但是我一直对于libgdx加载的图片大小必须是2的次方感到很纠结。

如果是一张一般的图片想在libgdx中使用的话就需要自己去用ps什么的把图像拉一下,一两张没关系,但是数量大了还是有点烦。

而且拉大的图片还需要TextureRegion来切割一下,实在麻烦。仔细看了一下libgdx的tool包,发现早有解决方案了。

具体的类是imagepacker,在com.badlogic.gdx.tools.imagepacker包之中。它可以将多张图片合并在一张之中。同时可以通过原有文件的文件名获得图片资源。

这里有几张图片:

111415xpic2766

将它们放在一个文件夹中(这个文件夹没有其他东西了)。引用gdx-tool.jar。

代码如下:

1 Settings settings = new Settings(); 
2 settings.alias = true; 
3 TexturePacker.process(settings, "D:\\img", "D:\\img\\output");

在output文件夹中可以找到两个文件,其中一个是合成好的图片

img1

另外一个名为pack,其中记录了源文件的位置,大小和名称。

点击查看pack文件内容

将图片和pack文件拷贝到项目目录。这里说明一下,pack文件的文件名可以随便改,合成的图片如果需要改名的话就需要改一下pack文件里面的内容了。

使用时的具体类是TextureAtlas。

代码:

 1 package com.cnblogs.htynkn.game;
 2 
 3 import com.badlogic.gdx.ApplicationListener; 
 4 import com.badlogic.gdx.Gdx; 
 5 import com.badlogic.gdx.graphics.GL10; 
 6 import com.badlogic.gdx.graphics.g2d.TextureAtlas; 
 7 import com.badlogic.gdx.scenes.scene2d.Stage; 
 8 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 9 
10 public class TexturePackerDemo implements ApplicationListener {
11 
12     Stage stage; 
13     
14     @Override 
15     public void create() { 
16         stage=new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); 
17         TextureAtlas atlas=new TextureAtlas(Gdx.files.internal("imgs/pack")); //根据pack文件获取所有图片 
18         Image image1=new Image(atlas.findRegion("14")); //获取名为14的图片,并创建一个Image对象 
19         image1.scaleX=image1.scaleY=0.2f; 
20         image1.x=image1.y=0; 
21         Image image2=new Image(atlas.findRegion("xpic2766")); 
22         image2.x=image2.y=40; 
23         image2.scaleX=image2.scaleY=0.5f; 
24         stage.addActor(image1); 
25         stage.addActor(image2); 
26     }
27 
28     @Override 
29     public void dispose() { 
30         stage.dispose(); 
31     }
32 
33     @Override 
34     public void pause() { 
35         // TODO Auto-generated method stub
36 
37     }
38 
39     @Override 
40     public void render() { 
41         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
42         stage.act(Gdx.graphics.getDeltaTime()); 
43         stage.draw(); 
44     }
45 
46     @Override 
47     public void resize(int width, int height) { 
48         // TODO Auto-generated method stub
49 
50     }
51 
52     @Override 
53     public void resume() { 
54         // TODO Auto-generated method stub
55 
56     }
57 
58 } 

效果:

texturepacker1

 

写在最后:

1.使用TexturePacker的最大好处就是方便,我觉得从根本让加载图片大小的问题对开发者透明了。

2.使用TexturePacker提升了效率,比起一张一张图片加载,合并图无疑是个很好的选择。

3.使用TexturePacker应该注意不要盲目合并,将在一个场景中使用的图片合并在一起,其他场景或暂时用不到的图片合并到其他中去。我个人认为一张图片的大小不超过1024*1024为佳。

4.TexturePacker工具用着不怎么顺手。我觉得每次新建一个java项目,然后填写路径很麻烦。热心的网友做了GUI版本的。

texturepacker2

下载地址:http://www.ctdisk.com/file/4279795

项目地址:http://code.google.com/p/libgdx-texturepacker-gui/

posted @ 2013-02-04 21:09  王世桢  阅读(189)  评论(0)    收藏  举报