1. 程式人生 > >關於cocos2dx客戶端程式的自動更新解決方案

關於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() == 0return 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上測試通過)(該腳本沒有進行判斷,需要自行清理環境)(該腳本只允許上傳不允許下載,不允許使用匿名用戶和本地用戶登