非常多使用cocos2dx+lua做遊戲的同學。都會想到乙個問題,我的遊戲一旦公布,如何才幹保證的我指令碼**不被破解。不洩露**。儘管這和開源、共享的原則不合。可是**也是coder的勞動成果,理應得到保護。
特別是商業遊戲更是如此,不希望被別人破解掉源**而且進行改動。
今天的話題就是怎樣實現lua指令碼檔案的加密和解密。
我在網路上查過,都沒有成熟的解決方式。然後我經過考慮之後,總結出兩種解決方式,供大家參考。
1、輕量級的解決方式。apk打包之前,用工具把全部的lua檔案加密,詳細是將lua檔案讀到記憶體,然後使用zip等壓縮加密庫進行壓縮加密,然後將壓縮加密之後的資料儲存為和原始檔同名的檔案。
打包之後執行lua檔案的時候。則先讀出lua資料。然後進行解密。將解密後的流資料傳給lua虛擬機器。
2、重量級的解決方式,此方案是上一種方案的擴充套件。也是商用遊戲的方案,實現乙個遊戲檔案包,打包前將資源和指令碼都使用工具打包到乙個檔案。能夠在打包的時候加密壓縮,也能夠不加密壓縮。
然後在執行的時候直接從包內讀出對應檔案的資料。然後解密解壓縮。然後提供給遊戲引擎使用。這也是端遊普遍使用的技術,手遊眼下大部分也開始使用此技術。
本文主要簡要解說第一種方案,另外一種方案則有時間再寫一篇部落格。好了。我們開始進入正題吧。
首先是壓縮lua檔案。**例如以下:
int write_file_content(const char* folder)
//得到檔案大小
fseek(fpin, 0, seek_end);
unsigned int size = ftell(fpin);
//讀出檔案內容
fseek(fpin, 0, seek_set);
void* con = malloc(size);
int r = fread(con, size, 1, fpin);
//進行加密操作
unsigned long zip_con_size = size * 2;
void* zip_con = malloc(zip_con_size);
if (z_ok != compress((bytef*)zip_con, &zip_con_size, (bytef*)con, size))
printf("%s 壓縮前大小:%ld 壓縮後大小:%ld\n", folder, size, zip_con_size);
//寫檔案內容
fseek(fpin, 0, seek_set);
int len = fwrite(zip_con, zip_con_size, 1, fpin);
//釋放資源
fclose(fpin);
free(zip_con);
free(con);
return 0;
}
然後是解密操作。**例如以下:
void* read_file_content(const char* folder, int& bufflen)
//獲取檔案大小
fseek(file, 0, seek_end);
unsigned int size = ftell(file);
//讀出檔案內容
void* con = malloc(size);
fseek(file, 0, seek_set);
int len = fread(con, size, 1, file);
//解壓縮操作
unsigned long zip_size = size * 4;
void* zip_con = malloc(zip_size);
int code = uncompress((bytef*)zip_con, &zip_size, (bytef*)con, size);
if (z_ok != code)
//釋放資源
fclose(file);
free(con);
//zip_con由外部釋放
bufflen = zip_size;
return zip_con。
}
最後就把此流檔案塞給lua的虛擬機器就可以,即以流方式執行lua**。
改動lua的檔案載入器。自己定義lua檔案載入
cocos2d x 手遊研發 目錄
感謝 這套框架只用了cocos2d x,c 語言,vs2012開發環境 我會繼續堅持寫下去,並不為什麼,就為喜愛遊戲,編寫自己的乙個世界。本套原始碼是cocos2d x 2.1rc0 x 2.1.4版本引擎 使用將hellocpp裡面內容複製到你對應的專案結構裡面即可 目錄 cocos2d x 大型...
cocos2dx戰爭迷霧實現 lua
tilemap的美術資源 戰爭迷霧 戰爭迷霧的原理在網上已經有相關資料,就不補充了。戰爭迷霧用 t1中索引與tilemap的gid對應,右邊值 表 與tilemap的資源對應。p.t1 2 3 5 6 8 13 15 7 12 4 14 9 11 10 1 t2索引與t1的右邊的表的數字的和對應,值...
COCOS2DX 遊戲開發之二六 手遊短連線
手遊中的短連線 手遊採用短連線,好處自然不言而喻,所謂的短連線就是只有需要和伺服器通訊的時候才連線伺服器,通訊完畢就斷開連線,我叫mt也採用了短連線的方式弊端 1.每次傳送訊息的連線伺服器和斷開伺服器也是一筆不小的開銷 2.不適合那些大量即時資訊的手遊優點 1.只在需要同步的時候才和伺服器連線傳送資...