1. 程式人生 > >(轉)quick-cocos2d-x圖片資源加密(續)

(轉)quick-cocos2d-x圖片資源加密(續)

player AD sign 信息 text 語句 osc osi pan

摘要: 對在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

(轉)quick-cocos2d-x圖片資源加密(續)