texturepacker key怎么用

&&&&TexturePackerGUI破解版 使用指南
TexturePackerGUI破解版 使用指南
TexturePackerGUI破解版 内附使用指南
若举报审核通过,可奖励20下载分
被举报人:
wyh1987811
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
移动开发下载排行使用TexturePacker打包资源 - 简书
下载简书移动应用
写了1503字,被3人关注,获得了2个喜欢
使用TexturePacker打包资源
游戏开发中经常需要将小的图片资源打包成spritesheet,TexturePacker是一个非常好用的工具,项目组开发都是使用这个工具,官方网站:
使用方式也非常的简单,将你准备好的图片资源或者整个目录拖到图1-1中间的虚线框中,然后最好保存一个工程文件;右边Settings中Data栏下Data Format选择cocos2d-x就可以;Settings中每个栏目的右边都有一个"show advanced"按钮,点击后会显示出高阶选项;具体的每个选项就不说了,每个项目的要求不一样,详细的可以参看官方文档的解释;这里只说一个需要注意点:Data栏中有个"Prepend folder name"的选项,勾选后,导出的plist文件中frame名字会加上目录名,如图1-3;这样就可以避免SpriteFrameCache载入时资源缓存被替换的问题,尤其是角色动画序列帧的管理
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常囧事等等,欢迎投稿《程序员》专题。
投稿须知:
...
· 115095人关注
开发工具收录
· 18人关注阅读(4339)
& & 最近我们要开一个新项目,UI与交互打算借鉴当前正火的《圣火英雄传》,程序开发为了和美术制作并行,打算用圣火的资源暂代使用。我解压圣火apk,发现用TexturePacker命令行无法把它的pvr.ccz资源文件转成png,稍微了解一下,才知道TP提供了加密功能。我最近做Unity开发,只需要TP最基本的打图集功能,所以一直用v2.4.5,很久没有升级了,out了。
& & 圣火资源加密了,没有密钥无法打开
& & 美术同学可以先截图或画草图给程序用,但是,截图/草图跟原图比:大小规格不对,质量差,图元叠在一起,也会缺漏很多。不说耗费美术大量精力做繁重的体力活,这样做出的东西也会“惨不忍睹”,等正式美术资源来了,所有美术显示也都需要程序重新调整,这是不小的工作量。所以,最好的方法是研究破解圣火的加密资源。工程师的工作就是减小人的劳动,提高生产效率。
& & 动态库注入与API拦截
& & 开始时,我心里一点底儿也没有,因为我是开发游戏的,从来没做过破解。仅有的一点相关经验是几年前看时用DLL注入和API拦截,做过一些游戏的反外挂工作。几年没做PC开发,具体实现早忘光了,只记得大致原理是通过注入自己的DLL到目标进程,劫持某些API,替换成自己的实现。
& & android内核是基于linux的,我想linux下是否也可以通过注入拦截API呢?只要能劫持API,就能破解。google &linux + inject&,linux下果然也可以注入,更进一步发现有人已经开源了自己写的注入库,,核心的系统API是,还有几个操作动态链接库的API,dlopen、dlsym、dlclose、dlerror。注入之后,就是劫持,遍历got表,找到接口的地址然后替换成自己写的接口即可。
& & 注入和劫持都ok之后,我试着劫持printf,替换成自己的函数,成功,我心里对破解有底了。下面是一些具体的操作过程。
& & 首先要把手机root,把注入进程和劫持库拷贝到手机上,比如/data目录下,adb push命令。如果提示“Permission Denied”,就先把/data挂载(mount),然后改变文件权限(chmod)。
& & 然后,打开圣火包里面lib目录,发现圣火用的是cocos2d-js v2.2开发,去cocos2d-x官方下载v2.2.5。然后,找到加载pvr.ccz的模块,都在ZipUtils.h和ZipUtils.cpp文件中。
void ZipUtils::ccSetPvrEncryptionKeyPart(int index, unsigned int value)// 设置密钥的接口
int ZipUtils::ccInflateCCZFile(const char *path, unsigned char **out) // 加载ccz文件的接口
& & 我本想劫持设置密钥的用户自定义接口:ccSetPvrEncryptionKeyPart,这样可以直接获取密码。但是,从soinfo-&symtab中获取的符号名始终是乱码,目前我还没搞明白原因,请知道的朋友指导。我就转而看ccInflateCCZFile的实现,这个接口会读取ccz文件的二进制数据,然后根据前四个字节判断是否合法的ccz文件(“CCZ!”)或者是否加密的ccz文件(“CCZp”),如果是加密的,就解密。接着,调用了libz的解压缩接口:
int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);& & 原来ccz也是一种zip压缩格式。这里需要用到source和destLen这两个参数,source是解密出来的ccz文件数据,*destLen是压缩前的大小。既然如此,我只要把uncompress接口劫持了,就可以破解出资源。ps. 除了劫持uncompress,还可以劫持opengl接口,毕竟所有图都要送到opengl绘制。
& & 看看ccz的文件头:
/** @struct CCZHeader
struct CCZHeader {
unsigned char
// signature. Should be 'CCZ!' 4 bytes
unsigned short
compression_
// should 0
// should be 2 (although version type==1 is also supported)
// Reserverd for users.
// size of the uncompressed file
&& source是不包含文件头的,所以需要自己把文件头填充进去。sig是“CCZ!”,compress_type是0,version是2,reserved是0,len是*destLen。创建一个ccz文件,把文件头和source写入。然后,把生成的ccz文件拷回本机,adb pull,“Permission Denied”?chmod。怀着激动地心情用TexturePacker打开,却报告失败。然后用Notepad++的Hex Editor打开,转成16进制,发现文件头的大小端逆序了,如果是小端,要逆序写文件。改了之后重新生成ccz,成功打开。
& & 解密出来的圣火资源——Activity.pvr.ccz
& & 文件命名
& & 劫持uncompress是无法知道文件名的。写一个文件扫描圣火资源目录,根据以文件size为key,文件名为value。然后,根据文件size做匹配就可以了。因为文件的size是精确到byte的,一般不会有文件是同样大小。我检查了圣火,211个ccz文件,没有同样大小的。
& & 转png与切图
& & TexturePacker可以直接命令行把ccz转png,然后再写一个工具,读plist切散图就可以了,可以用CocosStudio,网上也有人用python写的。至此,我们已经完美的破解了圣火所有的资源,获得了所有美术资源。
& & 切出来的圣火美术资源散图
& & &除了《圣火英雄传》,还有很多游戏也是用TexturePacker加密资源,都可以用这个方法破解。为了避免争端,暂不放出我写的代码和工具。
& & 转载请注明出处:&。作者:夜风。
阅读排行榜您的位置:> -&
-& >TexturePacker下载 档案号:#105061
软件授权:
软件大小:
软件语言:
软件评级:
官方主页:
更新时间:
应用平台:
复制到论坛
复制到博客
绿盟口号! 伸出你的手 - 绿色分享:
官方评级:4/8401
同类软件推荐
本类下载排行TexturePacker的使用
-android100学习网
TexturePacker的使用
首先要解释一下,为什么要使用TexturePacker? 这是应为我们做的游戏最终要运行在Android手机或者苹果手机上,而Android或者ios系统使用的是OpenGL ES来渲染。
首先要解释一下,为什么要使用TexturePacker?
这是应为我们做的游戏最终要运行在Android手机或者苹果手机上,而Android或者ios系统使用的是OpenGL ES来渲染。所以我们要针对OpenGL ES来进行优化。
内存方面,OpenGL ES纹理要求宽和高都是2的n次幂的倍数。想一想,如果图片的宽为33,而高为65,那么图片加载到内存后的大小为多少?考虑到宽和高都是2的n次幂,所以加载到内存后的大小是64*128。所以我们可以考虑将小的图片拼成到的图片,然后加载。
渲染速度方面,OpenGL ES要求切换的纹理少,所以将图片拼成大图片,这样就减少了纹理的切换。
所以使用TexturePacker是很有必要的。
打开TexturePacker,点击Add Folder,将图片全部加载进来。注意:我们应该事先将要拼凑的图片放到同一个文件夹下。
这样。TexturePacker就自动将我们要拼凑的图片拼成了一个大图,并且大图的宽和高都是2的n次幂的倍数。
下面设置输出格式:
Texture format设置成PNG。然后选择Data file和Texture file的保存位置。点击工具栏上的Publis。这样我们就得到了plist文件和png文件。
下面就是在cocos2d-x中使用这两个文件。
将这两个文件复制到Resources文件夹中。
使用下面的代码加载着两个文件
CCSpriteFrameCache::sharedSpriteFrameCache()-&addSpriteFramesWithFile("last.plist","last.png"); &
CCSpriteFrameCache::sharedSpriteFrameCache()-&addSpriteFramesWithFile("last.plist","last.png");
接着创建一个CCSpriteBatchNode,将要渲染的精灵加载到CCSpriteBatchNode。&
CCTexture2D *texture=CCTextureCache::sharedTextureCache()-&textureForKey("last.png"); &
CCSpriteBatchNode *node=CCSpriteBatchNode::batchNodeWithTexture(texture); &
addChild(node); &
CCTexture2D *texture=CCTextureCache::sharedTextureCache()-&textureForKey("last.png");
CCSpriteBatchNode *node=CCSpriteBatchNode::batchNodeWithTexture(texture);
addChild(node);
然后就是创建精灵并且加载精灵了。
CCSprite *s1=CCSprite::createWithSpriteFrameName("bird.png"); &
s1-&setPosition(ccp(35,32.5)); &
node-&addChild(s1); &
CCSprite *s2=CCSprite::createWithSpriteFrameName("cat.png"); &
s2-&setPosition(ccp(100,100)); &
node-&addChild(s2); &
CCSprite *s1=CCSprite::createWithSpriteFrameName("bird.png");
s1-&setPosition(ccp(35,32.5));
node-&addChild(s1);
CCSprite *s2=CCSprite::createWithSpriteFrameName("cat.png");
s2-&setPosition(ccp(100,100));
node-&addChild(s2);
其中“bird.png”是小图片的名字。注意:CCSpriteBatchNode中的Sprite都要用同一个纹理。&

我要回帖

更多关于 texturepacker中文版 的文章

 

随机推荐