zoukankan      html  css  js  c++  java
  • AssetsManager下载类

    cocos2dx-2.1.3 2dx自己代的例子进行讲解

    360   cocos2dx net  --> 2.1.3AssetsManager

    AppDelegate.cpp详解

    1.创建目录

    createDownloadedDir();

    2.三个按钮

    (1)enter

    if (!isUpdateItemClicked)

        {

            vector<string> searchPaths =CCFileUtils::sharedFileUtils()->getSearchPaths();得到资源路径

            searchPaths.insert(searchPaths.begin(),pathToSave);设置优先在 1 新创建的那个目录下寻找资源,如果找不到再去rescourse下去寻找

            CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);对优先资源路径进行设置

        }

    通过执行脚本显示界面

    (2)reset

    删除新创建的目录和里面的所有资源

    getAssetsManager()->deleteVersion();把xml里的版本号置“”

    createDownloadedDir();穿件目录

    (3)update

    getAssetsManager()->update();进行资源下载

    3.getAssetsManager

    创建AssetsManager对象设置下载地址( .zip文件结尾的地址),版本地址(如果版本没变不会进行下载,版本信息存到本地的xml文件里了)

    以及下载下来文件的存储位置

     

    AssetsManager.cpp详解

    宏定义

     

    KEY_OF_VERSION xml文件里的key存放当前的版本

    KEY_OF_DOWNLOADED_VERSION xml文件里的key,如果下载完成了但是没有解压成功(或解压完成)

    存放的是当前下载的版本号,如果解压成功了设置成 "",把当前的版本号设置给key_of_version,

    如果下载完成了但是没来及解压就退出了,下一次可以根据这个key对应的value就行判断解压而不用重新下载了

    TEMP_PACKAGE_FILE_NAME新下载的文件的名字

    BUFFER_SIZE解压时每次读取的字节数

    MAX_FILENAME解压用

    1.构造函数3个

    AssetsManager::AssetsManager()

    AssetsManager::AssetsManager(constchar*packageUrl,constchar*versionFileUrl)

    AssetsManager::AssetsManager(constchar*packageUrl,constchar*versionFileUrl,constchar*storagePath)

    初始化

    _version("")//都是""

    _packageUrl(packageUrl)//下载 .zip文件地址

    _versionFileUrl(versionFileUrl)//版本核查地址 v1.0

     

    _storagePath(storagePath)//.zip下载后存储位置

     

    _curl(NULL)//libcurl要初始化

    2.checkStoragePath

    由1调用

    检查_storagePath 存储地址不能为""并且不是以"/"结尾的,在结尾处加上"/"

    3.getVersionCode libcurl绑定的下载字符串回调函数通过checkUpdate里调用

    把下载的字符串放到传过来的字符串指针里

    4.checkUpdate

    通过网络检查当前的版本是不是最新版本。如果是设置优先搜索资源路径setSearchPath

    5.update

    (1)下载地址、版本核查的网址都不能为null,存储的文件名以"。zip"后缀

    (2)checkUpdate调用,是最新版本了返回,不是执行下面

    (3)通过xml文件判断是不是下载完成了没有解压,是,解压,不是,调用,downLoad下载

    (4)下载完成uncompress解压

    (5)设置资源搜索优先级setSearchPath

    (6)删除.zip源文件

    6.uncompress

    根据.zip文件路径解压.zip文件,createDirectory创建解压到那个文件夹下

    7.createDirectory

    创建目录

    8.setSearchPath

    设置搜索资源优先级目录

    9.downLoadPackage

    下载资源时不断回调,通过传过来的文件指针,不断把下载的内容写到本地文件里。

    10.progressFunc

    下载资源时不断回调,显示下载完成百分比

    11.downLoad

    执行下载资源,建立了指向本地资源的指针

    12.一些get, set方法

    下载资源网络地址

    getPackageUrl  setPackageUrl

    存储到本地路径

    setStoragePath  getStoragePath

    获取版本信息网络地址

    getVersionFileUrl  setVersionFileUrl

    从plist文件里得到当前版本

    getVersion  deleteVersion

    cocos2dx-2.1.4比cocos2dx-2.1.3增加的方法

    AppDelegate.cpp类

     

    1.UpdateLayer

     

    继承了AssetsManagerDelegateProtocol(AssetsManager.cpp里新增加的一个类)和CCLayer

    2.pProgressLabel是一个 label用来显示下载的百分比

    3.getAssetsManager

    pAssetsManager->setDelegate(this); this传给上面的AssetsManagerDelegateProtocol对下载成功、出错、下载进度等进行回调

    pAssetsManager->setConnectionTimeout(3);

    4.onError

    没有新版本或网络连接出错进行回调

    5.onProgress

    传回下载百分比

    6.onSuccess

    下载成功了包括解压成功了

    用官方demo注意事项

    1.如果屏蔽了检查版本checkUpdate(),要重新初始化_curl =curl_easy_init()。

    2.res = curl_easy_setopt(_curlCURLOPT_SSL_VERIFYPEER0L) 这句话要加在 downLoad()里

    3.https://raw.github.com/minggo/AssetsManagerTest/master/package.zip   例子里的网址 https协议可能不被支持返回 1错误。

       http://raw.github.com/minggo/AssetsManagerTest/master/package.zip

    4.AssetsManager.cpp
    (1)屏蔽 void* assetsManagerDownloadAndUncompress(void *data)

        //if (self->_downloadedVersion != self->_version)

    (2)屏蔽void AssetsManager::update()

        //my

    //    if (_versionFileUrl.size() == 0 ||

    //        _packageUrl.size() == 0 ||

    //        std::string::npos == _packageUrl.find(".zip"))

    //    {

    //        CCLOG("no version file url, or no package url, or the package is not a zip file");

    //        return;

    //    }

        //my

        //if (! checkUpdate()) return;

    (3)屏蔽void AssetsManager::Helper::handleUpdateSucceed(Message *msg)

          //    if (manager) manager->_delegate->onSuccess();   下载成功回调,不屏蔽有时会崩溃。

        在这里写自己的单例,回调下载并解压成功

    (4)屏蔽void AssetsManager::Helper::update(float dt)

        显示进度条,有时会崩溃。

    //            if (((ProgressMessage*)msg->obj)->manager->_delegate)

    //            {

    //                ((ProgressMessage*)msg->obj)->manager->_delegate->onProgress(((ProgressMessage*)msg->obj)->percent);

    //            }

       在int assetsManagerProgressFunc(void *ptr,double totalToDownload,double nowDownloaded, double totalToUpLoad, double nowUpLoaded)

        加回调显示下载进度DownloadLayer::singleDown()->onProgress((int)(nowDownloaded/totalToDownload*100));

        下载出错

    //            if (((ErrorMessage*)msg->obj)->manager->_delegate)

    //            {

    //                ((ErrorMessage*)msg->obj)->manager->_delegate->onError(((ErrorMessage*)msg->obj)->code);

    //            }

                

                DownloadLayer::singleDown()->onError(((ErrorMessage*)msg->obj)->code);//自己

  • 相关阅读:
    JS 这一次彻底理解选择排序
    JS 这一次彻底理解冒泡排序
    JS script脚本async和defer的区别
    精读JavaScript模式(九),JS类式继承与现代继承模式其二
    google recaptcha 谷歌人机身份验证超详细使用教程,前端/后端集成说明
    JS 究竟是先有鸡还是有蛋,Object与Function究竟谁出现的更早,Function算不算Function的实例等问题杂谈
    NetFramework 专栏总集篇
    详解 服务发现 的基本实现
    CF150E Freezing with Style(点分治)
    LOJ6032.「雅礼集训 2017 Day2」水箱
  • 原文地址:https://www.cnblogs.com/zhepama/p/3306123.html
Copyright © 2011-2022 走看看