加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 18:54:45 所属栏目:百科 来源:网络整理
导读:摘要: 对在quick-cocos2d-x上实现的资源加密方法的补充 前篇: quick-cocos2d-x图片资源加密 让quick-cocos2d-x支持加密的plist文件 ? 通过前篇的修改,我们已经能够在Windows平台的player,以及Android上使用加密的常见格式(png、jpg等)的图片资源了。不过

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

前篇:

quick-cocos2d-x图片资源加密

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

?

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

首先来修改Mac上的Player代码。我们这次要修改的是libcocos2d-xcocos2dxplatformmac目录下的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(),?&fileSize);

?

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

unsigned?char*?pFileData?=?CZHelperFunc::getFileData(strTemp.c_str(),?&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(),?&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就比较容易了,因为修改方法很类似,只是文件不同。要修改的是libcocos2d-xcocos2dxplatformios目录下的CCImage.mm和CCFileUtilsIOS.mm文件。这两个文件里要修改的函数都是一样的,连需要修改的代码都几乎一样,唯一需要稍为注意的是在IOS里要用UIImage来代替Mac里的NSImage。这里就不再贴出代码了。

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

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

支持TGA文件,修改libcocos2d-xcocos2dxsupportimage_support下的TGAlib.cpp,类似上面,也是一条语句的事。

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

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

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

(

2014.2.24更新:

支持pvr.ccz文件,需要修改libcocos2d-xcocos2dxsupportzip_supportZipUtils.cpp文件里的ccInflateCCZFile函数,也是一条读文件内容的语句,各平台下都适用。

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读