关于图片资源的打包当然是采用TexturePacker了。官方网址:http://www.codeandweb.com/texturepacker

个人觉得是2d里面最好的资源打包工具,没有之一。

TexturePacker它是一款把若干资源图片拼接为一张大图的工具。TexturePacker可以直接选定一个文件夹,将里面的小图片生成一个大图片,并输出plist文件的工具。使用该工具,合图就非常简单了。TexturePacker自带有资源加密的功能。

关于如何使用。在此不再赘述。可自行搜索教程。

在此只想说明两点网上很少提及的:

1.命令行。

2.加密。

一、命令行

TexturePacker

界面的设置完全可以用命令行来执行。这样的好处就是完成可以批处理图片资源。前期资源是没有压缩和加密的。后期只需要替换压缩图片。使用命令行批处理一下。非常非常的方便。

1.命令行的安装。

默认安装TexturePacker 之后,命令行是没有配置到系统环境的。配置方法如下:

单击单击标题栏TexturePacker,选择安装命令行。即可。

2.TexturePacker 的一些常用参数信息

下面是TexturePacker 的一些常用参数信息。详细参数可直接在终端输入TexturePacker

XML/HTML代码You can specify one or more .png or .tps files or directories for processing.

Recursively adds all known files in the sprite sheet

*.tps file created with TexturePackerPro (requires pro license)

Additional set options override settings in the *.tps file

Flash requires pro license

Image formats, supported:

Output:

--sheet Name of the sheet to write, see texture-format for formats available

--texture-format Sets the format for the textures.

The format type is automatically derived from the sheet's file name

if possible.

--data Name of the data file to write

--format Format to write, default is cocos2d

--force-publish             Ignore smart update hash and force re-publishing of the files

--texturepath Adds the path to the texture file name stored in the data file.

Use this if your sprite sheets are not stored in another folder than your data files.

--reduce-border-artifacts   Removes dark shadows around sprites

--extrude Extrudes the sprites by given value of pixels to fix flickering problems in tile maps

--scale Scales all images before creating the sheet. E.g. use 0.5 for half size

--scale-mode Use mode for scaling:

二,图片加密

接下来讲述资源加密的一些技巧, 关于图片加密其实TexturePacker官方有详细的指导说明,官方有一篇文档有完整的介绍。

http://www.codeandweb.com/texturepacker/contentprotection

不过,cocosBuilder作者已经不再维护Builder了。所以教程对应的cocos2d 2.x 有些过时。所以在此重新啰嗦一下.

查看cocos2dx源代码发现加密的关键部分:大致意思就是用密钥循环异或data字节。

C++代码// encrypt first part completely

for(; i

{

data[i] ^= s_uEncryptionKey[b++];

if(b >= enclen)

{

b = 0;

}

}

// encrypt second section partially

for(; i

{

data[i] ^= s_uEncryptionKey[b++];

if(b >= enclen)

{

b = 0;

}

}

1.效果预览:

首先看一下,资源包加密VS未加密预览的效果:

VS

采用TexturePacker加密之后,资源是无法被查看到的。

Ps:在开发的过程中,可以采用未加密的资源开发,之后再打包发布的时候,采用命令行批处理一遍即可。

2.资源加密步骤:

1.单击ContentProtection旁边的Lock图标。弹出lock窗口:

你需要填写32位的密钥(0-9 a-f)

Create new key 是系统随机密钥

Clear/Disable 启用/关闭图片加密功能

Save as global key 将该密钥作为全局的密钥,以后对其他的图片加密直接使用global key 即可。

Use global key 使用保存的全局密钥。

2.Save

3.Publish

接下来的步骤和官方的介绍不同:主要是3.0已经集成了图片加密的功能。

首先需要了解:

如果你的密钥是aaaaaaaabbbbbbbbccccccccdddddddd,你必须将它们分成4部分每部分8位:

0xaaaaaaaa

0xbbbbbbbb

0xcccccccc

0xdddddddd

在TexturePacker官网介绍的方法是下载其提供的ZipUtils 文件替换cocos2dx 。在最新版的cocos2dx zipUtils 里面已经集成了对TexturePacker 解密的处理,所以无需按照其步骤处理。

Ps:下载其ZipUtils 复制替换后,cocos2dx lib 会出错。

我们直接使用coco2d-x-3.0自带的可以了。下面是对其解密的源代码:

C++代码cocos2dx/support/zip_support/ZipUtils.h

/** Sets the pvr.ccz encryption key.

*

* Example: If the key used to encrypt the pvr.ccz file is

* 0xaaaaaaaabbbbbbbbccccccccdddddddd you will call this function with

* the key split into 4 parts as follows

*

* ZipUtils::ccSetPvrEncryptionKey(0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xdddddddd);

*

* Note that using this function makes it easier to reverse engineer and

* discover the complete key because the key parts are present in one

* function call.

*

* IMPORTANT: Be sure to call ccSetPvrEncryptionKey or

* ccSetPvrEncryptionKeyPart with all of the key parts *before* loading

* the spritesheet or decryption will fail and the spritesheet

* will fail to load.

*

* @param keyPart1 the key value part 1.

* @param keyPart2 the key value part 2.

* @param keyPart3 the key value part 3.

* @param keyPart4 the key value part 4.

*/

staticvoidccSetPvrEncryptionKey(unsignedintkeyPart1, unsignedintkeyPart2, unsignedintkeyPart3, unsignedintkeyPart4);

Ps: 在ZipUtils 中还有其他类似的函数。使用其中一个即可。

调用:

我们在AppDelegate.cpp applicationDidFinishLaunching函数中增加如下代码:

C++代码ZipUtils::ccSetPvrEncryptionKey(0x12345678,0x87654321,0x12345678,0x87654321);

就可以正常使用资源了。

下面是Lua 使用资源的测试代码:

C++代码require"Cocos2d"

cclog = function(...)

print(string.format(...))

end

-- forCCLuaEngine traceback

function __G__TRACKBACK__(msg)

cclog("----------------------------------------")

cclog("LUA ERROR: ".. tostring(msg) .."\n")

cclog(debug.traceback())

cclog("----------------------------------------")

end

local function createShowSpriteScene()

cc.SpriteFrameCache:getInstance():addSpriteFrames("files/sprite.plist")

local showSprite = cc.Sprite:createWithSpriteFrameName("success_1.png")

showSprite:setPosition(cc.p(200,200))

returnshowSprite

end

local function main()

-- avoid memory leak

collectgarbage("setpause", 100)

collectgarbage("setstepmul", 5000)

local scene = cc.Scene:create()

local layer = createShowSpriteScene()

scene:addChild(layer)

cc.Director:getInstance():runWithScene(scene)

end

xpcall(main, __G__TRACKBACK__)

当我们注释在AppDelegate.cpp中,添加的代码后:会报如下错误:

2017年7月19日

android图片资源加密,手机游戏加密之2d资源加密相关推荐

  1. 基于Android系统的手机游戏(2048)的设计与实现

    目 录 摘 要 I Abstract II 第一章 绪论 5 1.1选题背景及意义 5 1.1.1选题背景 5 1.1.2选题意义 6 1.2发展现状 6 1.3研究主要内容 7 第二章 关键技术分析 ...

  2. android资apk资源加密,4399游戏盒 安卓APK sign 加密分析 之 so文件分析

    4399游戏盒 安卓APK加密分析 + so文件分析 4399 游戏盒都知道吧 今天玩他的加密 不过他的加密在so里面 是个md5  java层首先拼接的一段明文  传入到so里面在so里面有一个秘钥 ...

  3. 基于android平台的手机游戏的设计与实现,基于Android平台手机游戏社区的设计与实现...

    摘要: 在移动终端性能的不断提高和移动互联网的不断普及,SNS社区以及不再只停留在电脑上,逐渐的走进了手机里,与以往的社区相比,手机社区有更好的实时性,以及能够更方便的提供LBS服务功能.目前每个社区 ...

  4. android原生系统手机游戏,ROG真游戏手机系统主页面有三大虚拟按键!安卓原生系统?...

    原标题:ROG真游戏手机系统主页面有三大虚拟按键!安卓原生系统? 为了满足用户玩游戏的需求,游戏手机在今年横空出世了,目前最具代表的就是黑鲨和红魔.相比普通的旗舰机,游戏手机除了配置更加强悍,同时散热 ...

  5. android 三屏手机游戏,大象侠攻略三屏操作手速必须要快

    大象侠攻略三屏操作手速必须要快,在这款游戏中玩家会体验到三类分屏的操作,这种类型的游戏还是比较少的.游戏中玩家没有需要解锁的关卡和装备,只要点击大象就可以让他换装,同时可以无条件的选择自己想要冒险的关 ...

  6. .Net培训教你用C#开发手机游戏!

    .Net培训教你用C#开发手机游戏! 很多初学者误以为Android.IOS开发只能使用Java.ObjectC等语言进行开发,其实借助于Mono技术我们可以使用C#.Net编写Android.IOS ...

  7. 经典按键java手机游戏_用诺基亚N95体验2G时代的JAVA手游,能正常运行吗?

    5G时代的来临似乎有点快,尽管5G在有些地区还没有完全普及开来,不少人还在用只支持4G.3G的手机,甚至还有在用2G手机.但不可否认的是,手机是否支持5G俨然成为当下消费者买手机的第一关注点. 而这篇 ...

  8. 经典按键java手机游戏_用诺基亚N95体验2G时代的JAVA网游,能正常运行么

    5G时代的来临似乎有点快,尽管5G在有些地区还没有完全普及开来,不少人还在用只支持4G.3G的手机,甚至还有在用2G手机.但不可否认的是,手机是否支持5G俨然成为当下消费者买手机的第一关注点. 而这篇 ...

  9. PayPal助中国手机游戏开发商制胜海外市场

    FEELINGTOUCH和GeaxGame最新Android手机游戏集成PayPal移动支付解决方案 PayPal助中国手机游戏开发商制胜海外市场     2011年10月24日,中国上海 -- 全球 ...

  10. 真正的JavaScript加密和网页资源加密系统,从原理到实现

    网站作为网民获取信息的主要来源之一,基于Html5的建站服务和应用越来越多,而Html5存在一个关键问题: 网页内的资源(包括了javascript.文字.图像等)可以通过非常简单的方式获取! 目前网 ...

最新文章

  1. Struts(七):action配置文件之通配符映射
  2. C++ Primer 5th笔记(chap 14 重载运算和类型转换)成员运算符
  3. 详解Kafka与ActiveMQ的区别与联系!
  4. html返回顶部_Jquery实现一键返回顶部
  5. hbase hbck的参数使用
  6. erlang 常用函数
  7. 8421转换法可以轻松实现各进制之间的转换
  8. Docker 快速安装教程
  9. android x5webview截长图
  10. 古代到现在一些小国家的形成和解体
  11. 地图SDK全面升级 – 数十项新功能及优化等你来体验
  12. 爬虫技术(05)神箭手爬虫回调函数
  13. Excel也能调用HFSS?
  14. 什么是软件测试?零基础入门知识要点总结篇,5分钟带你快速了解
  15. 类似淘巴士订票小程序
  16. c语言企业自动化管理系统,基于C语言制作的人事管理系统-自动化毕业论文.doc...
  17. 什么是IEEE、EI、SCI?
  18. 提取TCGA 中体细胞突变数据的表达矩阵
  19. 1.通过PADS Logic创建原件类型和逻辑封装
  20. 从无栈协程到C++异步框架

热门文章

  1. Java求矩形面积和圆形面积的异常处理实例
  2. 深入理解计算机系统第四版_技术干货 |深入理解计算机系统之链接
  3. python导出百万数据到excel_Python 批量插入100万级数据到Excel文件(简洁版)
  4. postgres 显示变量,如何在PostgreSQL查询中声明变量
  5. C++:字符串转换成整数
  6. 数乌龟(母牛,兔子....)[打表法]
  7. python 人脸识别活体检测_基于Python+Keras+OpenCV实现实时人脸活体检测
  8. 国家计算机房机柜接地图集,中国铁塔机房及室外机柜标准图集.pdf
  9. 徐州有初中计算机编程,徐州初中分布大全(学校+地址+联系方式)
  10. 用python打印心形_Python和Js打印心形