国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

cocos2dx上做邊下邊玩小包熱更

這篇具有很好參考價值的文章主要介紹了cocos2dx上做邊下邊玩小包熱更。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

因為公司業(yè)務(wù)需求需要做邊下邊玩的小包下載,在這里記錄一下思路

下載庫我使用的是cocos2dx 4.x的CCDownloader來下載文件

大體思路就是hook住fileutils中的getFileData函數(shù)和isFileExist函數(shù)。

isFileExist:無論初始包里文件是否存在,只要文件是游戲的資源文件這里都要返回“文件存在”

getFileData:這里判斷當(dāng)文件在文件列表中但是游戲包體里不存在該文件時,需要暫停主線程并且去下載文件,文件下載完成時恢復(fù)主線程

當(dāng)暫停主線程時,下載文件的回調(diào)需要在子線程中回調(diào)否則無法回調(diào)成功

除上面的下載文件以外,主線程中根據(jù)缺少的文件列表按照一定策略持續(xù)下載缺少的文件(優(yōu)先下載列表等)。

下面是一些主要的代碼:

 1 //使用條件變量暫停主線程
 2 //繼承了CCFileUtils文件
 3 unsigned char* QFileUtils::getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize)
 4 {
 5     auto download = QDownloadSmallPack::getInstance();
 6     auto index = QIndex::getInstance();
 7     if (download->isStartCheckRes())
 8     {
 9         bool hasFile = download->checkFile(pszFileName);
10         if (!hasFile)
11         {
12             QIndex::IndexEntry* filePathInIndex = index->getFilePathByIndex(pszFileName);
13             if (filePathInIndex && !filePathInIndex->name.empty())
14             {
15                 std::unique_lock<std::mutex> lock{_m};
16                 download->downloadFile(filePathInIndex, _cond_var);
17                 
18                 if (!download->isDownloadOK)
19                 {
20                     _cond_var.wait(lock, [download](){ return download->isDownloadOK; });
21                 }
22                 
23             }
24         }
25     }
26 
27     return CCFileUtils::getFileData(pszFileName, pszMode, pSize);
28 }
- (id)init: (const cocos2d::network::DownloaderApple*)o hints:(const cocos2d::network::DownloaderHints&) hints
{
    DLLOG("Construct DownloaderAppleImpl %p", self);
    // save outer task ref
    _outer = o;
    _hints = hints;

    // create task dictionary
    self.taskDict = [NSMutableDictionary dictionary];

    // create download session
    NSURLSessionConfiguration *defaultConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    if (hints.callBackInMainThread)
    {
//在主線程中回調(diào)
        self.downloadSession = [NSURLSession sessionWithConfiguration:defaultConfig delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    }
    else
    {
//在子線程中回調(diào)
        self.downloadSession = [NSURLSession sessionWithConfiguration:defaultConfig delegate:self delegateQueue:nil];
    }
    
//    self.downloadSession.sessionDescription = kCurrentSession;
    return self;
}
//其他兩個回調(diào)做同樣的修改就好    
void onProgress(final int id, final long downloadBytes, final long downloadNow, final long downloadTotal) {
        DownloadTask task = (DownloadTask)_taskMap.get(id);
        if (null != task) {
            task.bytesReceived = downloadBytes;
            task.totalBytesReceived = downloadNow;
            task.totalBytesExpected = downloadTotal;
        }
        if (_callBackInMainThread){
            Cocos2dxHelper.getActivity().runOnGLThread(new Runnable() {
                @Override
                public void run() {
                    nativeOnProgress(_id, id, downloadBytes, downloadNow, downloadTotal);
                }
            });
        }else {
//在子線程中回調(diào)
            new Runnable() {
                @Override
                public void run() {
                    nativeOnProgress(_id, id, downloadBytes, downloadNow, downloadTotal);
                }
            }.run();
        }
    }
//cv是getfiledata中使用的條件變量    
_downloader->onFileTaskSuccess = [this, &cv](const cocos2d::network::DownloadTask& task)
    {
//做一些游戲自己的檢測邏輯,確認(rèn)文件下載完成之后這里設(shè)置條件變量并且通知主線程恢復(fù)
            isDownloadOK = true;
            cv.notify_all();
    };
   

?文章來源地址http://www.zghlxwxcb.cn/news/detail-774757.html

?


到了這里,關(guān)于cocos2dx上做邊下邊玩小包熱更的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 《入門級-Cocos2dx4.0 塔防游戲開發(fā)》---第六課:歡迎界面開發(fā)(四、自定義精靈)

    《入門級-Cocos2dx4.0 塔防游戲開發(fā)》---第六課:歡迎界面開發(fā)(四、自定義精靈)

    目錄 ?一、開發(fā)環(huán)境 二、開發(fā)內(nèi)容 2. 1 新建自定義精靈 2.2 在welcome中創(chuàng)建新的menu 2.3 消息綁定以及消息響應(yīng) 三、演示效果 四、知識點 4.1 內(nèi)部消息響應(yīng) 4.2 字體精靈說明 4.3?CC_SYNTHESIZE宏 操作系統(tǒng):UOS1060專業(yè)版本。 cocos2dx:版本4.0 環(huán)境搭建教程:統(tǒng)信UOS下配置安裝cocos2dx開發(fā)

    2024年02月11日
    瀏覽(27)
  • Pygame和Cocos2d

    Pygame和Cocos2d都是 Python 中常用的游戲引擎,但它們的設(shè)計目標(biāo)、特點和使用場景略有不同。 Pygame與Cocos2d,目前是使用人數(shù)最多的兩個Python游戲庫。根據(jù)某知名產(chǎn)品點評網(wǎng)站的數(shù)據(jù)顯示,Cocos2d排名第一,Pygame排名第二。 Pygame是一種基于SDL(Simple DirectMedia Layer)的Python庫,主要

    2024年01月21日
    瀏覽(30)
  • cocos2D插件轉(zhuǎn)3D插件

    cocos2D插件轉(zhuǎn)3D插件

    2024年02月16日
    瀏覽(23)
  • Cocos2d-x實現(xiàn)文字顏色漸變

    Cocos2d-x實現(xiàn)文字顏色漸變

    更改CCLabel文件的updateColor()函數(shù)中的頂點顏色即可,代碼如下: 效果圖: ?

    2024年02月12日
    瀏覽(29)
  • cocos2d-x C++與Lua交互

    cocos2d-x C++與Lua交互

    Cocos版本: 3.10 Lua版本: 5.1.4 環(huán)境: window Visual Studio 2013 Lua 作為一種腳本語言, 它的運行需要有 宿主 的存在,通過 Lua虛擬棧 進(jìn)行數(shù)據(jù)交互。 它的底層實現(xiàn)是 C 語言,C語言封裝了很多的API接口,使得C/C++與Lua之間可以很方便的通信交互。 Lua的官網(wǎng): https://www.lua.org/ 在coc

    2024年02月08日
    瀏覽(19)
  • 使用“Cocos引擎”創(chuàng)建的cpp工程如何在VS中調(diào)試Cocos2d-x源碼

    使用“Cocos引擎”創(chuàng)建的cpp工程如何在VS中調(diào)試Cocos2d-x源碼

    前段時間Cocos2d-x更新了一個Cocos引擎,這是一個集合源碼,IDE,Studio這一家老小的整合包,我們可以使用這個Cocos引擎來創(chuàng)建我們的項目。 在Cocos2d-x被整合到Cocos引擎之前,我們可以不那么方便地在我們創(chuàng)建的工程里調(diào)試Cocos2d-x的代碼,當(dāng)我們使用了整合后的Cocos引擎,調(diào)試

    2024年02月12日
    瀏覽(23)
  • cocos2d-x Android原生平臺與Lua交互

    版本: cocos2d-x 語言: C++/Java/Lua cocos2d-x原生平臺Android 接入第三方SDK, 需要了解 LuaJavaBridge 的使用。 它封裝了用于 Java 和 Lua 的相互調(diào)用, 其調(diào)用通過 C++ 為中介,簡要的流程: Lua調(diào)用Java: Lua - C++ - Java Java調(diào)用Lua: Java - C++ - Lua 以此方式來實現(xiàn)數(shù)據(jù)的交互, 接下來我們分別說下

    2024年02月08日
    瀏覽(34)
  • cocos2d-x 3.17 推箱子 0.1

    cocos2d-x 3.17 推箱子 0.1

    此版本為推箱子游戲的基礎(chǔ)版本, 后續(xù)添加如下功能 人物動畫 TiledMap 解析 射線碰撞檢測 下一步提示, C++算法解析 道具, 可以回退一步 通過 cocos 命令新建一個項目, 將本項目的 Reources 目錄和 Classes 目錄復(fù)制過去即可 使用圖集繪制 Sprite , 然后手動處理碰撞檢測 游戲?qū)W論著翻譯

    2024年02月08日
    瀏覽(25)
  • 綁定證書的cocos2d程序如何對wss長連接抓包

    綁定證書的cocos2d程序如何對wss長連接抓包

    點擊上方 ↑ ↑ ↑ 藍(lán)字[ 協(xié)議分析與還原 ]關(guān)注我們 “ ?解決在應(yīng)用內(nèi)綁定了證書的cocos2d應(yīng)用wss長連接抓包的問題。 ” 在分析應(yīng)用的過程中,不可避免地需要抓包。 沒加密的還好說,隨便找個工具抓下就可以分析了,有些應(yīng)用數(shù)據(jù)使用tls加密了,但用的是系統(tǒng)內(nèi)置的證書,

    2024年02月05日
    瀏覽(26)
  • 《入門級-Cocos2d 4.0塔防游戲開發(fā)》---第二課:游戲加載界面開發(fā)

    《入門級-Cocos2d 4.0塔防游戲開發(fā)》---第二課:游戲加載界面開發(fā)

    目錄 一、開發(fā)環(huán)境介紹 二、開發(fā)內(nèi)容 2.1 修改窗口的大小。 2.2 添加加載場景相關(guān)代碼 2.3 添加資源 三、顯示效果 四、知識點 ?4.1?Sprite 4.2 定時器 操作系統(tǒng):UOS1060專業(yè)版本。 cocos2dx:版本 環(huán)境搭建教程: 統(tǒng)信UOS下配置安裝cocos2dx開發(fā)環(huán)境_三雷科技的博客-CSDN博客 ? ? ? ?游

    2024年02月15日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包