博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
love2d教程32--碎图打包器texturepacker
阅读量:6902 次
发布时间:2019-06-27

本文共 2601 字,大约阅读时间需要 8 分钟。

texturepacker是一个碎图打包器,可以把小图合并成一张大图,并对大图做优化。我用的是特别版(只好用xx版了,

不然导出的图片会被变成红色),,文件会提示有毒,我也是在网上找的,其实是补丁,放心用。把补丁放到

安装后的bin目录,并添加到杀毒软件信任名单,或者先关闭杀毒软件,运行补丁。

碎图打包只需把包含图片的文件夹拖到右边的Sprite就可以了。

注意导出格式选择如下图,点击工具栏上的Publishe就可以了,其它的默认。

 

这会导出一个lua文件和一个合成后的png图片,lua文件里记载了碎图在大图里位置等信息。

我稍微封装为imgSheet类,可以载入多个lua和png图片,并支持动画,需要注意的是,没有

做错误检查,代码如下:

imgSheet={frames={},anims={}}--添加texturepacker导出的lua和大图,imgfile要完整路径和后缀function imgSheet.addSheet(luafile,imgfile)    local t=dofile(luafile)    local frameIndex=t.frameIndex    local frames = t.sheet.frames        for k,v in pairs(frameIndex) do        frames[v]["sheetFile"]=imgfile  --保存碎图对应的大图名        frames[v]["show"]=true --是否在屏幕上显示        imgSheet.frames[k]=frames[v]            endend--file碎图文件名,不要后缀,后面的参数与love.graphics.draw相同function imgSheet.drawFrame(file,x, y, r, sx, sy, ox, oy, kx, ky )    local frame = imgSheet.frames[file]    local image = love.graphics.newImage(frame.sheetFile)    local quad = love.graphics.newQuad(frame.x, frame.y, frame.width, frame.height, image:getWidth(), image:getHeight())    if frame.show then        love.graphics.draw(image, quad,x, y, r, sx, sy, ox, oy, kx, ky )    endend--获取碎图对应的数据,file不要后缀,以下函数也是如此function imgSheet.getFrame(file)    return imgSheet.frames[file]end--删除一帧图片,只是不在屏幕上显示function imgSheet.removeFrame(file)    imgSheet.frames[file].show=falseend--绘制动画 st文件名的起始序号,ed终止序号,tm动画每帧绘制时间--之后的参数同love.graphics.drawfunction imgSheet.drawAnim(file,st,ed,tm,x, y, r, sx, sy, ox, oy, kx, ky)    if not imgSheet.anims[file] then         --idx当前索引,state状态:1正常,0暂停,-1停止 ,-2删除        imgSheet.anims[file]={tm=tm,st=st,ed=ed,dt=0,idx=st,state=1}    end    local anim = imgSheet.anims[file]       if anim.state==1 then        anim.dt=anim.dt+love.timer.getDelta( )        if anim.dt>=anim.tm then            anim.dt=0            anim.idx=anim.idx+1            if anim.idx>anim.ed then                anim.idx=anim.st            end        end    end    if anim.state~=-2 then        imgSheet.drawFrame(file..anim.idx,x, y, r, sx, sy, ox, oy, kx, ky )    endend--暂停动画function imgSheet.pauseAnim(file)    local anim = imgSheet.anims[file]    if anim then        anim.state=0    endend--恢复动画function imgSheet.resumeAnim(file)    local anim = imgSheet.anims[file]    if anim then        if anim.state==0 then          anim.state=1        end    endend--停止动画function imgSheet.stopAnim(file)    local anim = imgSheet.anims[file]    if anim then        anim.state=-1    endend--删除动画function imgSheet.removeAnim(file)    local anim = imgSheet.anims[file]    if anim then        anim.state=-2    endendreturn imgSheet

 

完整的工程在下载,碎图在imgs目录下。

 

转载地址:http://sopdl.baihongyu.com/

你可能感兴趣的文章
centos添加批量添加ip提示无效参数
查看>>
PHP mkdir函数
查看>>
Linux基础命令---检查密码文件pwck
查看>>
Apache服务器之------初识apache
查看>>
欢迎您在新浪博客安家
查看>>
一个PHP文件下载类
查看>>
python这+=和=的拓展知识
查看>>
【转】Android 中input event的分析
查看>>
Spring框架基本概念之POJO,EJB,DI,AOP,IOO,JCA
查看>>
Java 之枚举类
查看>>
我的友情链接
查看>>
Linux下修改/设置环境变量JAVA_HOME
查看>>
MRP(Media Redundancy Protocol)介质冗余协议
查看>>
在SQL查询中使用LIKE来代替IN
查看>>
mysql主从相关
查看>>
学习网络-TCP/IP模型
查看>>
oracle集群件
查看>>
linux shell 中"2>&1"含义
查看>>
oracle 11g RAC grid安装前准备
查看>>
01背包 暴力搜索
查看>>