(转)quick-cocos2d-x图片资源加密(续)

摘要: 对在quick-cocos2d-x上实现的资源加密方法的补充

前篇:

quick-cocos2d-x图片资源加密

让quick-cocos2d-x支持加密的plist文件

通过前篇的修改,我们已经能够在Windows平台的player,以及Android上使用加密的常见格式(png、jpg等)的图片资源了。不过,在MAC上的player,以及IOS上,加载资源时调用的是另外的代码,所以我们需要另外作修改。

首先来修改Mac上的Player代码。我们这次要修改的是lib\cocos2d-x\cocos2dx\platform\mac目录下的CCImage.mm文件。在_initWithFile这个函数的开头,可以看到以下代码:

NSString *fullPath = [NSString stringWithUTF8String:path];
jpg = [[NSImage alloc] initWithContentsOfFile: fullPath];

我们用以下代码来代替:

unsigned long fileSize = 0;
unsigned char* pFileData = cocos2d::CZHelperFunc::getFileData(path, "rb", &fileSize);
NSData *adata = [[NSData alloc] initWithBytes:pFileData length:fileSize];
delete []pFileData;
jpg = [[NSImage alloc] initWithData:adata];

而在CCImage::initWithImageFile函数中,又看到了熟悉的语句:

unsigned char* pFileData = CCFileUtils::sharedFileUtils()->getFileData(strTemp.c_str(), "rb", &fileSize);

修改这个应该已经很熟练了:

unsigned char* pFileData = CZHelperFunc::getFileData(strTemp.c_str(), "rb", &fileSize);

另外,HelperFunc.h头文件的包含肯定是必须的,后面的修改也一样,就不再每次都说明了。

好,现在MAC支持加密的图片文件了。如果要支持加密的plist文件的话,还要改同一目录下的CCFileUtilsMac.mm文件。找到CCFileUtilsMac::createCCDictionaryWithContentsOfFile函数,需要修改的是这两句:

NSString* pPath = [NSString stringWithUTF8String:fullPath.c_str()];
NSDictionary* pDict = [NSDictionary dictionaryWithContentsOfFile:pPath];

需要写的代码就比以前的稍多一点了:

unsigned long fileSize = 0;
unsigned char* pFileData = CZHelperFunc::getFileData(fullPath.c_str(), "rb", &fileSize);
NSData *data = [[[NSData alloc] initWithBytes:pFileData length:fileSize] autorelease];
delete []pFileData;
NSPropertyListFormat format;
NSString *error;
NSMutableDictionary *pDict = (NSMutableDictionary *)[
                           NSPropertyListSerialization propertyListFromData:data
                           mutabilityOption:NSPropertyListMutableContainersAndLeaves
                           format:&format
                           errorDescription:&error];

改好了MAC,修改IOS就比较容易了,因为修改方法很类似,只是文件不同。要修改的是lib\cocos2d-x\cocos2dx\platform\ios目录下的CCImage.mm和CCFileUtilsIOS.mm文件。这两个文件里要修改的函数都是一样的,连需要修改的代码都几乎一样,唯一需要稍为注意的是在IOS里要用UIImage来代替Mac里的NSImage。这里就不再贴出代码了。

经过这么多修改,基本上常用的图片文件都已经支持,不过,有些特殊格式的文件也是有可能用到的,顺便提一下吧。

支持PVR文件,要修改lib\cocos2d-x\cocos2dx\textures目录下的CCTexturePVR.cpp文件,找到CCFileUtils::sharedFileUtils()->getFileData所在的那一句进行修改就是了,不需要多说了。

支持TGA文件,修改lib\cocos2d-x\cocos2dx\support\image_support下的TGAlib.cpp,类似上面,也是一条语句的事。

另外在lib\cocos2d-x\cocos2dx\textures目录下还有个文件CCTextureCache.cpp,我没细看,应该是跟TMX MAP的载入有点关系。里面也只是一条语句的事情,一起改掉吧,呵呵。

经过以上修改后,应该能满足绝大多数的加密需求了。粗粗的浏览了一下代码,应该只有PKM文件无法支持,因为它是直接通过JNI调用Android的API来对文件解码的,不是太好修改了。

以上是我个人的修改方法,肯定还有更好的改法,希望能和大家相互分享和交流。如果有错误的地方,也请大家多多指正!

(

2014.2.24更新:

支持pvr.ccz文件,需要修改lib\cocos2d-x\cocos2dx\support\zip_support\ZipUtils.cpp文件里的ccInflateCCZFile函数,也是一条读文件内容的语句,各平台下都适用。

感谢群里的朋友“蚀生”提供这一信息!

原文地址:https://my.oschina.net/SunLightJuly/blog/189971

原文地址:https://www.cnblogs.com/wodehao0808/p/9104386.html

时间: 2024-11-13 10:10:27

(转)quick-cocos2d-x图片资源加密(续)的相关文章

(转)quick-cocos2d-x图片资源加密

摘要: 在quick-cocos2d-x上实现的一种图片资源加密的方法,现已经加入官方最新版本之中 ###quick-x已经支持用XXTEA加密方式对脚本文件进行加密.在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家. ###(2014.5.30加注:quick-x的2.2.3版本已经集成了我递交的pr,现在官方版本代码与文章中类似) ###首先我们要有对图片加密的工具.这个参考compile_scripts脚本,写一个用于加密的脚本就可以了.我自己写的脚本放在这里,大

【cocos2d-x 手游研发小技巧(7)图片资源加密,Lua文件加密】

游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePacker工具来加密的,不过针对性还是不够强. 分析一下原理为: 1,转格式:将需要加密的文件转为流的方式: 2,加密:根据自己需要使用加密手段,MD5,AES,甚至可以直接改变位移,加一些自己的特殊字符也可以使文件简单加密,加密完后基本保证 图片类型基本用特殊软件预览不了也打不开,Lua文件加密后一片乱

quick cocos2d x 手机(Android端)启动过程学习

简要学习下quick cocos2d x 在安卓端启动的过程. 首先需要了解一点:quick cocos2d x是依托于Android的activity和GLSurfaceView(继承自SurfaceView)的环境来显示quick层的游戏界面. (1)首先quick类的android游戏从AndroidManifest.xml文件指定的activity(假设AC)启动. (2)AC继承父类的Cocos2dxActivity. (3)调用静态初始化块,加载cocos2dx的动态库.也就是一些C

quick cocos2d-x Xcode下省去clean,让修改的脚本生效

<quick cocos2d-x Xcode下省去clean,让修改的脚本生效> 项目  target     build phases    点击build phase的空白区域 选择Editor     Add Build Phase      Add Run Script Build Phase 编写脚本: 顺序调整:(第二顺位) 这样就可以避免每次修改了lua脚本,都要手动clean,然后再run,太费时间.. quick cocos2d-x Xcode下省去clean,让修改的脚本生

quick cocos2d x场景切换的生命周期函数调用学习

先上一个场景的基本模版: 1 local ModelScene = class("ModelScene", function() 2 return display.newScene("ModelScene") 3 end) 4 5 function ModelScene:ctor() 6 self.sceneName = "ModelScene" 7 -- 注册点击事件监听 8 self.layer = display.newLayer() 9

Cocos2d-x图片资源加密

http://cn.cocos2d-x.org/tutorial/show?id=2739 图片加密使用xxtea来加密,加密秘钥自己定,思路就是自己使用代码首先将图片加密,在程序中使用的时候,在加载图片资源处再将资源解密. 加密代码如下: 1.首先要加载头文件 2.将图片加密 bool jiamiImg(string inputFileName,string outFileName)   {       string fileName=FileUtils::getInstance()->ful

cocos2d-x 图片资源加密,Lua文件加密 (转)

游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePacker工具来加密的,不过针对性还是不够强. 分析一下原理为: 1,转格式:将需要加密的文件转为流的方式: 2,加密:根据自己需要使用加密手段,MD5,AES,甚至可以直接改变位移,加一些自己的特殊字符也可以使文件简单加密,加密完后基本保证 图片类型基本用特殊软件预览不了也打不开,Lua文件加密后一片乱

cocos2d-x PNG图片资源加密

实现原理 如果你对实现原理并不感兴趣,只是想直接使用的话可以跳过这节.首先我假设读者已经清楚PNG图像文件结构了,如果没有的话这里建议可以看看<揭秘数据解密的关键技术>第5章,这章里面专门对PNG图像格式进行了介绍.或者看看<PNG文件格式详解>这篇文章. 实现原理很简单,只是将PNG文件的文件头和每个数据块的名称给去掉,特殊的数据块(如IHDR和IEND)连数据块内容也一并给去掉.在这之后,已经找不到PNG的特征信息了.但是要怎么解密呢?我将去掉的那些信息按照一定格式保存起来,然

cocos2dx 图片资源加密

图片加密使用xxtea来加密,加密秘钥自己定,思路就是自己使用代码首先将图片加密,在程序中使用的时候,在加载图片资源处再将资源解密 加密代码如下: 首先要加载头文件 2.将图片加密 bool jiamiImg(string inputFileName,string outFileName) { string fileName=FileUtils::getInstance()->fullPathForFilename(inputFileName); if(fileName.empty()) { r