前篇:
ios
經過前篇的修改,咱們已經可以在Windows平臺的player,以及Android上使用加密的常見格式(png、jpg等)的圖片資源了。不過,在MAC上的player,以及IOS上,加載資源時調用的是另外的代碼,因此咱們須要另外做修改。函數
首先來修改Mac上的Player代碼。咱們此次要修改的是lib\cocos2d-x\cocos2dx\platform\mac目錄下的CCImage.mm文件。在_initWithFile這個函數的開頭,能夠看到如下代碼:ui
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函數中,又看到了熟悉的語句:spa
unsigned char* pFileData = CCFileUtils::sharedFileUtils()->getFileData(strTemp.c_str(), "rb", &fileSize);
修改這個應該已經很熟練了:.net
unsigned char* pFileData = CZHelperFunc::getFileData(strTemp.c_str(), "rb", &fileSize);
另外,HelperFunc.h頭文件的包含確定是必須的,後面的修改也同樣,就再也不每次都說明了。code
好,如今MAC支持加密的圖片文件了。若是要支持加密的plist文件的話,還要改同一目錄下的CCFileUtilsMac.mm文件。找到CCFileUtilsMac::createCCDictionaryWithContentsOfFile函數,須要修改的是這兩句:orm
NSString* pPath = [NSString stringWithUTF8String:fullPath.c_str()]; NSDictionary* pDict = [NSDictionary dictionaryWithContentsOfFile:pPath];
須要寫的代碼就比之前的稍多一點了:blog
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函數,也是一條讀文件內容的語句,各平臺下都適用。
感謝羣裏的朋友「蝕生」提供這一信息!
)