關於cocos2dx客戶端程式的自動更新解決方案
轉載自:簾卷西風的專欄(http://blog.csdn.net/ljxfblog)
隨著手機遊戲的不斷髮展,遊戲包也越來越大,手機網路遊戲已經超過100M了,對於玩家來說,如果每次更新都要重新下載,那簡直是災難。而且如果上IOS平臺,每次重新發包都要稽核,勞神費力。所以當前的主流手遊都開始提供自動更新的功能,在不改動C++程式碼的前提下,使用lua或者js進行業務邏輯開發,然後自動更新指令碼和資源,方便玩家也方便研發者。
以前做端遊的時候,自動更新是一個大工程,不僅要能更新資源和指令碼,還要更新dll檔案等,後期甚至要支援P2P,手遊目前基本上都使用http方式。cocos2dx也提供了一個基礎功能類AssetsManager,但是不太完善,只支援單包下載,版本控制基本沒有。因此我決定在AssetsManager的基礎上擴充套件一下這個功能。
先明確一下需求,自動更新需要做些什麼?鑑於手遊打包的方式,我們需要能夠實現多版本增量更新遊戲資源和指令碼。明確設計思路,首先,伺服器端,我們要要有一個版本計劃,每一個版本和上一個版本之間的變化內容,打成一個zip包,併為之分配一個版本,然後將所有版本的資訊放到http伺服器上。然後,客戶端程式啟動的時候我們都需要讀取伺服器所有的版本資訊,並與客戶端版本進行比較,大於本地版本的都是需要下載的內容,將下載資訊快取起來,然後依次下載並解壓,然後再正式進入遊戲。
好了,我們先設計一下版本資訊的格式吧!大家可以看看。
1.
http:
//203.195.148.180:8080/ts_update/
1 1001 scene.zip
2.
//格式為:檔案包目錄(http://203.195.148.180:8080/ts_update/)
總版本數量(1)
3.
//版本號1(1001)
版本檔案1(scene.zip) ... 版本號n(1001) 版本檔案n(scene.zip)
我們現在開始改造AssetsManager,首先定義下載任務的結構。
01.
struct
UpdateItem
02.
{
03.
int
version;
04.
std::string
zipPath;
05.
std::string
zipUrl;
06.
07.
UpdateItem(
int
v,
std::string p, std::string u) : version(v), zipPath(p), zipUrl(u) {}
08.
};
09.
std::deque<UpdateItem>
_versionUrls;
然後改造bool checkUpdate(),這裡把伺服器的版本內容解析出來,放到一個佇列_versionUrls裡面。
01.
bool
UpdateEngine::checkUpdate()
02.
{
03.
if
(_versionFileUrl.size()
==
0
)
return
false
;
04.
05.
_curl
= curl_easy_init();
06.
if
(!_curl)
07.
{
08.
CCLOG(
"can
not init curl"
);
09.
return
false
;
10.
}
11.
_version.clear();
12.
13.
CURLcode
res;
14.
curl_easy_setopt(_curl,
CURLOPT_URL, _versionFileUrl.c_str());
15.
curl_easy_setopt(_curl,
CURLOPT_SSL_VERIFYPEER, 0L);
16.
curl_easy_setopt(_curl,
CURLOPT_WRITEFUNCTION, getVersionCode);
17.
curl_easy_setopt(_curl,
CURLOPT_WRITEDATA, &_version);
18.
if
(_connectionTimeout)
curl_easy_setopt(_curl, CURLOPT_CONNECTTIMEOUT, _connectionTimeout);
19.
curl_easy_setopt(_curl,
CURLOPT_NOSIGNAL, 1L);
20.
curl_easy_setopt(_curl,
CURLOPT_LOW_SPEED_LIMIT, LOW_SPEED_LIMIT);
21.
curl_easy_setopt(_curl,
CURLOPT_LOW_SPEED_TIME, LOW_SPEED_TIME);
22.
res
= curl_easy_perform(_curl);
23.
24.
if
(res
!=
0
)
25.
{
26.
Director::getInstance()->getScheduler()->performFunctionInCocosThread([&,
this
]{
27.
if
(
this
->_delegate)
28.
this
->_delegate->onError(ErrorCode::NETWORK);
29.
});
30.
相關推薦
客戶端程式自動更新(升級)的方式
一、C/S自動更新原理 C/S程式自動升級是一個很重要的功能,原理其實很簡單,一般包含兩個程式一個是主程式,也就是除了升級功能以外的程式,另一個就是升級程式,常見的360,金山安全衛士都是這樣。 主要包括以下幾點: 1 比較版本 2下載檔案
C# 實現客戶端程式自動更新(百度搜索C#雲更新程式)
http://www.cnblogs.com/jenry/archive/2006/08/15/477302.html 由於微軟提供的更新程式使用不方便,所以又寫了此程式。此程式是本人一年前所寫的一段程式,當時在開發一個CS版本報價系統,當時由於開發過程倉促,程式碼可能有
C# 實現客戶端程式自動更新
看到一篇不錯的帖子,可能以後會用到,果斷收藏 文章來源 部落格園 jenry(雲飛揚)http://www.cnblogs.com/jenry/archive/2006/08/15/477302.html 由於微軟提供的更新程式使用不方便,所以又寫了此程式。此程式是本人一
關於cocos2dx客戶端程式的自動更新解決方案
轉載自:簾卷西風的專欄(http://blog.csdn.net/ljxfblog) 隨著手機遊戲的不斷髮展,遊戲包也越來越大,手機網路遊戲已經超過100M了,對於玩家來說,如果每次更新都要重新下載,那簡直是災難。而且如果上IOS平臺,每次重新發包都要稽核,勞神
WSDL控制檯中wsimport命令生成客戶端程式碼報錯解決方案
在使用webservice時,利用jdk自帶的wsimport.exe生成客戶端程式碼時發生如下錯誤: 正在解析 WSDL... [ERROR] Unexpected end of file from server 無法讀取 WSDL 文件: http://localhos
Java客戶端訪問HBase叢集解決方案(優化)
測試環境:Idea+Windows10 準備工作: <1>、開啟本地 C:\Windows\System32\drivers\etc(系統預設)下名為hosts的系統檔案,如果提示當前使用者沒有許可權開啟檔案;第一種方法是將hosts檔案拖到桌面進行配置
微信 IOS客戶端 Audio自動播放的解決方案
對於安卓機來說,下面的程式碼足以 var player = document.getElementById('mp3play'); player.play(); 但是對於IOS版本的微信,卻發現不能自動播放,網上也沒有好的解決
(已解決)c# 客戶端程式訪問oracle報錯:ORA-12154: TNS: 無法處理服務名
錯誤:ORA-12154: TNS: 無法處理服務名 這個錯誤大家在百度上一搜一大把,但是我出現這個錯誤的原因跟百度不太一樣,我的客戶端程式在不同的目錄可以正常執行,但在其中1個目錄就是要出錯,因此我想到是目錄路徑中出了問題,既然是路徑那就只能是資料夾名有什麼特殊之處導致不能執行,後來發現不能執
針對QT——“在程式檔案中(*ui,*cpp,*h)更改之後編譯執行的程式結果無法更新”——解決方案
本篇文章主要介紹在QT中,對程式檔案(*ui,*cpp,*h)更改之後編譯執行的程式結果卻無法更新的解決方案。 問題描述 在設計QT的GUI使用者介面時,我們需要不斷對程式檔案進行修改以優化使用者體驗,因此需要更新程式的生成檔案。 實際經歷:筆者最近在一個專案中需要將QT的GUI程式
網頁背景H5視訊自動播放---PC端、移動端相容問題完美解決方案(IOS、安卓、微信端)
最近公司官網需要使用視訊當做banner背景且自動播放,並且因為是官網需要做到PC端和移動端都可以適配相容,這些問題很是頭疼; 兵來將擋,水來土掩,進過查閱相關技術資料,現已完美相容PC端和移動端。下面就為大家詳細講解: PC端: PC端相應簡單些,瀏覽器對<video>標籤的相容還
端口占用解決方案大全,最方便快速的解除端口被占用,強制解除占用端口
強制解除端口占用 切換mysql windows 綠色環境搭建 解除端口占用 強制解除端口占用可以使用我最新開發的新版本PHPWAMP8.8.8.8(截止目前最新版)PHPWAMP最新版支持自定義Mysql版本和自定義PHP版本,是目前唯一集成了VC運行庫的真正純綠色軟件。最新版PHPWA
PowerBI更新 - 解決方案架構(一圖勝萬字!)
service 包括 obi font 數據模型 ont ima power mis 今天發福利啦!發福利啦!發福利啦! 企業的各種數據整合到PowerBI顯示,瀏覽器,移動端顯示關鍵指標。 一個很好的PowerBI解決方案的圖!一圖勝萬字!你所需要知
移動端常見問題及解決方案
ont 方案 不同 頁面 initial sca 刷新 detect 編碼 H5頁面窗口自動調整到設備寬度,並禁止用戶縮放頁面 <meta name="viewport" content="width=device-width,initial-scale=1.0,
手機端頁面自適應解決方案—rem布局
syn posit var cells document false 為什麽 gin element 只需在頁面引入這段原生js代碼就可以了 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 (function (doc
微信公眾號開發80端口映射解決方案
解決方案 微信開發 80端口映射 說明最近公司要搞微信公眾號開發,需要解決80端口映射的問題,看了網上好多老司機的方法,最終選擇ngrok比較符合公司的情況。微信公眾平臺開發,可參考:https://mp.weixin.qq.com/wiki 。微信公眾號接口只支持80接口。測試環境: wind
傾力總結40條常見的移動端Web頁面問題解決方案
web dropdown 文本 ie瀏覽器 -c cti nbsp name oct 1、安卓瀏覽器看背景圖片,有些設備會模糊。 用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麽呢? 經過研究,是devicePixelRatio作怪,因為手機分辨率太小
IIS無法啟動,應用程序池自動關閉,應用程序池XXXX將被自動禁用 解決方案之一
nbsp 問題 -- content 其中 iis service .com 裏的 是上網找各種相關資料。其中解決該問題的前半段是用如下這個帖子的方法。 http://www.360doc.com/content/14/1119/01/16402602_426289088.
使用shell腳本一鍵安裝zabbix並配置客戶端的自動發現選項
監控 shell zabbix 自動註冊 zabbix_agent 1.緣由: 我自己的ESXi服務器上上最近新加了好多虛擬主機,但我現在還不會安裝,使用,那種批量運維工具(saltstack,ansible,puppet等)。雖然還有一種方法:就是通過shell工具一次打開
配置puppet的主機端和客戶端的自動認證
serve init 環境 agent round exit isa 手動 技術分享 配置puppet的主機端和客戶端的自動認證 author:headsen chen 2017-11-01 17:44:56 個人原創,轉載請註明作者,出處,否則依法追究法律責任
ftp服務搭建腳本和客戶端ftp自動上傳腳本
被動模式 rgb fault virt otto shadow bak 安裝腳本 ssa linux服務器搭建ftp服務腳本(在centos6.5和centos7上測試通過)(該腳本沒有進行判斷,需要自行清理環境)(該腳本只允許上傳不允許下載,不允許使用匿名用戶和本地用戶登