libgdx 图片打包 TexturePacker

---恢复内容开始---

在OpenGL中,绘制图像需要绑定纹理,绑定纹理的代价很高消耗很大。

试想,有1000张不同的小图片需要绘制,就需要绑定1000次。

把这1000张小图,打包成一张大图,绑定时一次就够了。参照SQL批处理来理解吧。

当然实际情况怎么打包,每关打一个包,UI打一个包等等这些我们不讨论。

文档地址:https://github.com/libgdx/libgdx/wiki/Texture-packer

libgdx内置了打包工具,命令是:

// OS X / Linux
java -cp gdx.jar:extensions/gdx-tools/gdx-tools.jar com.badlogic.gdx.tools.texturepacker.TexturePacker inputDir [outputDir] [packFileName]

// WINDOWS
java -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/export
export
Packing.......
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, 90
10   orig: 90, 90
11   offset: 0, 0
12   index: -1
13 replay
14   rotate: false
15   xy: 2, 37
16   size: 148, 80
17   orig: 148, 80
18   offset: 0, 0
19   index: -1
20 startGame
21   rotate: false
22   xy: 2, 2
23   size: 99, 33
24   orig: 99, 33
25   offset: 0, 0
26   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     @Override
25     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     @Override
33     public void dispose() {
34
35         atlas.dispose();
36         stage.dispose();
37         super.dispose();
38     }
39
40     @Override
41     public void resize(int width, int height) {
42         stage.getViewport().update(width,height);
43         super.resize(width, height);
44     }
45 }

上面代码中,game和menu分别是打包时的两个子文件夹。

时间: 2024-11-02 23:40:58

libgdx 图片打包 TexturePacker的相关文章

Unity4.6 UGUI 图片打包设置(小图打包成图集 SpritePacker)

在学习UGUI的过程中,一直使用小图也就是散图,一个按钮一个图片,一个图标一个图片,这样每一个图片都有一个Drawcall. 之前公司的游戏都是使用Unity4.3+NGUI,在NGUI中可以使用Texturepacker,先把小图片打包成一张大图,然后在NGUI中设置引用大图中的哪一块作为图片,这样能减少很多Drawcall. 但是在UGUI中没有办法使用Texturepacker了,也迷糊了几天. 之后一直在百度谷歌寻找,才发现原来Unity4.6中自带了图集打包工具SpritePacker

Java如何将图片打包到jar中

Eclipse使用导出Jar包后打开加载不了图像 ?????? 出现这种问题的原因大多是因为路径的问题,往往是在项目中运行正常,但是一旦打包成Jar后就不能正常显示了,下面总结一下解决此类问题的方法: 一.通过使用外部资源文件的方式解决 把项目打包生成Jar后,再新建一文件夹,把项目中所有使用的图片文件和生成Jar文件放在该目录下,只要代码对图片文件的引用路径正确,如:ImageIconimage=newImageIcon(SwingResourceManager.getImage("icons

c#服务端图片打包下载

一,设计多图片打包下载逻辑:1,如果是要拉取腾讯云等资源服务器的图片,2,我们先把远程图片拉取到本地的临时文件夹,3,然后压缩临时文件夹,4,压缩完删除临时文件夹,5,返回压缩完给用户,6,用户就去请求下载接口,当下载完后,删除压缩包 二,如下代码,ImageUtil using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; us

webpack4.0(四) --css样式及图片打包(style-loader,css-loader)

一.CSS样式打包 1. loader简介 由于Webpack打包入口目前只配置了一个index.js文件,那么其他需要被打包的文件都必须通过模块化方式引入该文件才行,而默认情况下,引入的文件必须是js文件(如项目里添加的index.js). 那么其他文件类型该如何进行打包呢?这时我们就要用到webpack中所提供的各种loader,它就是专门用于处理除JS文件之外的其他格式文件的编译.提取.合并.打包等. 其中CSS文件的打包需要用到style-loader和css-loader这两个依赖包,

iOS_31_cocos2d_纹理打包(TexturePacker)

TexturePacker工具专用用来对多张图片进行打包成一张大图片 其目的是:1.节约内存空间,2.减少纹理渲染的次数 因为Android和iOS的游戏,都是通过OpenGL ES进行渲染, 而OpenGL ES要求纹理的尺寸必须为2的n次方, 如果不是,则会扩大至最近的2的n次方的尺寸(通过填充透明像素) 最重要的是:纹理渲染非常消耗性能, 如果每于每一张小图片,分别进行渲染,则都要经过三个步骤: 准备渲染.开始渲染.结束渲染 但是,如果用TP将,所有小图片,合成一张大图片, 则只需渲染一次

Unity3D 精灵图片打包与编辑

vue-cli 结局图片打包路径错误问题

在data里面 导入路径 topIcon2:require("./assets/img/topIcon2.jpg"), topIcon3:require("./assets/img/topIcon3.jpg"), topIcon4:require("./assets/img/topIcon4.jpg"), topIcon5:require("./assets/img/topIcon5.jpg"), 页面 <img v-i

libgdx学习记录19——图片动态打包PixmapPacker

libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题,这里针对的是0.9.9版本) 2. 使用TexturePacker将图片打包好然后作成一张大图添加进来. 第二种方法是常用方法,但是不太灵活,添加.删除某些图片不太方便,改动较大.这里可以考虑使用PixmapPacker将图片进行动态打包. 主要方法: pack(String name, Pixm

webpack图片的路径与打包

转的http://www.cnblogs.com/ghost-xyx/p/5812902.html 今天写 react遇到打包图片,之前都是通过url在css里,没遇到问题,今天在 react里直接用就错了,所以记录下来,这篇文章帮我解决了... 刚开始用webpack的同学很容易掉进图片打包这个坑里,比如打包出来的图片地址不对或者有的图片并不能打包进我们的目标文件夹里(bundle).下面我们就来分析下在webpack项目中图片的应用场景. 在实际生产中有以下几种图片的引用方式: 1. HTM