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

本文共 2656 字,大约阅读时间需要 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目录下。

 

转载于:https://www.cnblogs.com/xdao/p/love2d-tutor32.html

你可能感兴趣的文章
Oracle学习第七课-表连接及其应用
查看>>
Python基础篇【第十三篇】:面向对象
查看>>
bzoj 2465 小球
查看>>
String类
查看>>
NoSQL简介
查看>>
java_2018_Day5_变量的格式
查看>>
在C++中调用DLL中的函数
查看>>
leetcode 32. Longest Valid Parentheses
查看>>
OpenSSL创建私有CA
查看>>
CSS3画腾讯QQ图标 无图片和js参考
查看>>
C#使用Emit生成构造函数和属性
查看>>
python pip源配置,pip配置文件存放位置
查看>>
[数据库]关于MAX()函数的一个坑
查看>>
实现前后滚动效果-axure设计实例
查看>>
windows下mysql忘记root密码--吐血测试,都是泪
查看>>
lnmp集成开发环境安装pdo_dblib扩展
查看>>
linux web.py spawn-fcgi web.py 配置
查看>>
lintcode : 空格替换
查看>>
lintcode 中等题:subsets II 带重复元素的子集
查看>>
【原创】Linux基础之测试域名IP端口连通性
查看>>