文档章节

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

SunLightJuly
 SunLightJuly
发布于 2014/01/03 22:38
字数 871
阅读 4921
收藏 10

前篇:

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函数,也是一条读文件内容的语句,各平台下都适用。

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

)

© 著作权归作者所有

共有 人打赏支持
SunLightJuly
粉丝 59
博文 15
码字总数 12480
作品 0
成都
私信 提问
加载中

评论(4)

SunLightJuly
SunLightJuly

引用来自“先摸再打”的评论

//基于quick 2.2.6
CCLuaStack *pStack = pEngine->getLuaStack();
pStack->loadChunksFromZIP("res/framework_precompiled.zip");
//打包模式 compile_scripts.bat -i scripts -o res -e xxtea_zip -ek MYKEY game.zip
pStack->setXXTEAKeyAndSign("MYKEY", 6, "XXTEA", 5);
pStack->loadChunksFromZIP("res/game.zip");
//打包模式 pack_files.bat -i iamge -o res -m zip -es XXTEA -ek MYKEY
pStack->setXXTEAKeyAndSign("XXTEA", 5, "MYKEY", 6);
pStack->loadChunksFromZIP("res/iamges.zip");
pStack->executeString("require 'main'");

我的代码就是这样的 但是 运行时 加密脚本可以正常运行,但是 加密的资源找不到 路径 请问 是怎么一回事呢

我在网上百度 貌似很多人也说 图片资源找不到路径 能贴个能成运行的 代码吗
加密的资源如果使用zip打包的话,需要自己处理解压和加载,所以资源不建议打包。请按资源加密的第一篇文章里的命令:pack_files.bat -i olddir -o newdir -ek XXTEA -es tsts 直接加密出新的资源,并用加密后的资源文件替换原来的资源文件,这样就可以正常自动加载了
先摸再打
//基于quick 2.2.6
CCLuaStack *pStack = pEngine->getLuaStack();
pStack->loadChunksFromZIP("res/framework_precompiled.zip");
//打包模式 compile_scripts.bat -i scripts -o res -e xxtea_zip -ek MYKEY game.zip
pStack->setXXTEAKeyAndSign("MYKEY", 6, "XXTEA", 5);
pStack->loadChunksFromZIP("res/game.zip");
//打包模式 pack_files.bat -i iamge -o res -m zip -es XXTEA -ek MYKEY
pStack->setXXTEAKeyAndSign("XXTEA", 5, "MYKEY", 6);
pStack->loadChunksFromZIP("res/iamges.zip");
pStack->executeString("require 'main'");

我的代码就是这样的 但是 运行时 加密脚本可以正常运行,但是 加密的资源找不到 路径 请问 是怎么一回事呢

我在网上百度 貌似很多人也说 图片资源找不到路径 能贴个能成运行的 代码吗
SunLightJuly
SunLightJuly

引用来自“紫夜行者”的评论

你好,我看了最新的quick-cocos2dx2.2.5是都改过来了,但是我在加密一个db文件后去加载一直解析出错,是只针对图片的支持么?
这些修改当然是只针对图片的。要读取加密过的其他文件,可以使用CZHelpFunc类的getFileData接口来读取到内存。
杨凯
杨凯
你好,我看了最新的quick-cocos2dx2.2.5是都改过来了,但是我在加密一个db文件后去加载一直解析出错,是只针对图片的支持么?
quick-cocos2d-x图片资源加密

quick-x已经支持用XXTEA加密方式对脚本文件进行加密。在此基础上,自己做了一些工作,对图片资源进行了XXTEA加密,现分享给大家。 (2014.5.30加注:quick-x的2.2.3版本已经集成了我递交的pr,...

SunLightJuly
2013/12/12
0
28
浅析Android手游lua脚本的加密与解密

本文转载自 梦幻西游手游美术资源加密分析 浅析android手游lua脚本的加密与解密 lua、luac、luaJIT三种文件的关系 lua手游过程中有三种文件:lua、luac、luaJIT。lua是明文代码,直接用记事本...

qq_32400847
2017/11/12
0
0
quick-cocos2d-x基于源码加密打包功能的更新策略(2)

前一篇:quick-cocos2d-x基于源码加密打包功能的更新策略(1) 二、更新原理讨论及更复杂的更新功能 1.更新原理 在前面的更新过程中,从服务器取文件列表,并根据文件列表再更新相关的文件,这...

SunLightJuly
2013/12/02
0
50
loadChunksFromZIP效率问题

@SunLightJuly 你好,想跟你请教个问题:quick-cocos2d-x加密成zip包。调用loadChunksFromZIP函数加载,我看到你一个文章说是一次全部加载了所有文件,但我一个游戏大概上百文件。一次性加载...

睡到自然醒
2014/12/05
415
2
quick-cocos2d-x基于源码加密打包功能的更新策略(1)

Quick-cocos2d-x增加了编译及加密源代码的功能(具体可参考这篇文章)。以此功能为基础,我实现了一个版本更新模块,解决了自己项目中的版本更新需求。现抛砖引玉,与大家分享。 从基本原理和方...

SunLightJuly
2013/12/01
0
70

没有更多内容

加载失败,请刷新页面

加载更多

Httpd 整合 Tomcat 步骤

环境:Tomcat8 + Httpd2.4 工作原理:借助于Tomcat的AJP连接器实现Apache与Tomcat的通信 配置步骤: 1. 配置httpd.conf 新增: Include conf/extra/mod_jk.conf 修改:添加 index.jsp <IfM...

ZeroneLove
昨天
1
0
Docker笔记3——容器命令(未写完,明天整理接着写)

未写完,明天整理接着写 新建并启动容器 docker run docker run [OPTIONS] IMAGE [COMMEND] [ARG...] OPTIONS: --name=[容器新名字] :为容器指定一个名称 -d:后台运行容器,并返回容器ID,...

HappyBKs
昨天
1
0
2018个人年终总结

感谢领导的信任和指导,新的一年获得了很多成长和提高,改掉了很多不好的习惯。 在这一年里,我在领导的帮助下,主要完成了以下功能: 1、完成上海银行版本投资营销相关功能的开发。 2、完成车...

万山红遍
昨天
9
0
保密工作与linux系统的发展

保密工作从性质上可以分成商业方面的保密和国家安全方面的保密。由于自己从事的是IT方面的工作,工作中必然会接触涉及到计算机信息方面的相关文件。加上单位已近通过武器装备科研生产单位二级...

linux-tao
昨天
2
0
Spark共享变量

概述 Spark程序的大部分操作都是RDD操作,通过传入函数给RDD操作函数来计算。这些函数在不同的节点上并发执行,但每个内部的变量有不同的作用域,不能相互访问,所以有时会不太方便,Spark提...

仟昭
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部