首页 > 代码库 > libgdx 图片打包 TexturePacker
libgdx 图片打包 TexturePacker
---恢复内容开始---
在OpenGL中,绘制图像需要绑定纹理,绑定纹理的代价很高消耗很大。
试想,有1000张不同的小图片需要绘制,就需要绑定1000次。
把这1000张小图,打包成一张大图,绑定时一次就够了。参照SQL批处理来理解吧。
当然实际情况怎么打包,每关打一个包,UI打一个包等等这些我们不讨论。
文档地址:https://github.com/libgdx/libgdx/wiki/Texture-packer
libgdx内置了打包工具,命令是:
// OS X / Linuxjava -cp gdx.jar:extensions/gdx-tools/gdx-tools.jar com.badlogic.gdx.tools.texturepacker.TexturePacker inputDir [outputDir] [packFileName]// WINDOWSjava -cp gdx.jar;extensions/gdx-tools/gdx-tools.jar com.badlogic.gdx.tools.texturepacker.TexturePacker inputDir [outputDir] [packFileName]
随便找几张小图,我们试一下
localhost:libgdx-1.3.1 HanHongmin$ java -cp gdx.jar:extensions/gdx-tools/gdx-tools.jar com.badlogic.gdx.tools.texturepacker.TexturePacker /Users/HanHongmin/Documents/exportexportPacking.......Writing 256x128: /Users/HanHongmin/Documents/export-packed/pack.png
只输入了一个inputDir 参数,默认生成了xxx-packed的文件夹,里面有张pack.png的大图,还有一个pack.atlas文件。
1 pack.png 2 size: 242,117 3 format: RGBA8888 4 filter: Nearest,Nearest 5 repeat: none 6 backed 7 rotate: false 8 xy: 152, 27 9 size: 90, 9010 orig: 90, 9011 offset: 0, 012 index: -113 replay14 rotate: false15 xy: 2, 3716 size: 148, 8017 orig: 148, 8018 offset: 0, 019 index: -120 startGame21 rotate: false22 xy: 2, 223 size: 99, 3324 orig: 99, 3325 offset: 0, 026 index: -1
xy应该就是每张小图的其实位置,看起来是大图的左上角是(0,0)点。其他参数很好理解,不过不是很有必要读懂它。
这个还可以打包子文件夹!在inputDir参数的路径文件夹下建两个子文件夹,各方上几张图片试试。
文件夹中还可以放置pack.json来配置打包,查看文档吧!
使用打包的文件
1 public class PackerTester extends ApplicationAdapter { 2 private Stage stage; 3 private TextureAtlas atlas; 4 private Texture packed; 5 6 @Override 7 public void create () { 8 Gdx.app.setLogLevel(Application.LOG_DEBUG); 9 stage = new Stage();10 11 12 atlas = new TextureAtlas(Gdx.files.internal("packedimages/pack.atlas"));13 TextureAtlas.AtlasRegion region = atlas.findRegion("menu/backed");//找出来是那张大图14 packed = region.getTexture();15 Image imgPacked = new Image(packed);16 imgPacked.setPosition(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2);17 stage.addActor(imgPacked);18 Sprite sprite = atlas.createSprite("game/backed");19 Image img = new Image(sprite);20 //NinePatch patch = atlas.createPatch("patchimagename");21 stage.addActor(img);22 }23 24 @Override25 public void render () {26 Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);27 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);28 stage.act();29 stage.draw();30 }31 32 @Override33 public void dispose() {34 35 atlas.dispose();36 stage.dispose();37 super.dispose();38 }39 40 @Override41 public void resize(int width, int height) {42 stage.getViewport().update(width,height);43 super.resize(width, height);44 }45 }
上面代码中,game和menu分别是打包时的两个子文件夹。
libgdx 图片打包 TexturePacker
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。