• Cocos2dx-3.2 引擎学习(三)之AssetsManager


    按理说,是从头梳理cocos2dx,但是最近的需求。开始梳理学习AssetsManager。

    AssetsManager 的使用分步骤看:

    1.create obj

    1 pAssetsManager = new AssetsManager("https://raw.github.com/minggo/AssetsManagerTest/master/package.zip",
    2                                            "https://raw.github.com/minggo/AssetsManagerTest/master/version",
    3                                            pathToSave.c_str());

    三个参数:AssetsManager(资源zip包,资源版本号,下载zip后的保存路径)

    2.add Listener

    1 pAssetsManager->setDelegate(this);

    AssetsManager的三个回调方法:

    1     virtual void onError(cocos2d::extension::AssetsManager::ErrorCode errorCode);
    2     virtual void onProgress(int percent);
    3     virtual void onSuccess();

    使用回调的时候,需要让对应的类继承cocos2d::extension::AssetsManagerDelegateProtocol。然后重写上面的三个方法。

    AssetsManager源码:===========================

    void AssetsManager::setDelegate(AssetsManagerDelegateProtocol *delegate)
    {
      _delegate = delegate;
    }

    =========================================

    3.timeout time setting

    1 pAssetsManager->setConnectionTimeout(3);

    网络连接,超时时间的设置。

    4.start update resource.

    1 getAssetsManager()->update();

    执行update下载的时候分为3步骤:

      4.1 检查三个参数, (zip, versioncode, output dir)

      4.2 检查更新,(判断本地记录的版本跟服务器上面的版本号是否一致,如果版本号相等,则没有发现新版本。)

      4.3 创建线程Thread,下载,解压 ,更新

    5.reset or delete version record

    1     // Delete recorded version codes.
    2     getAssetsManager()->deleteVersion();

    如果有需要,可以重置记录在本地的versioncode的userdefault的xml文件

    看本地的版本生成文件userdefault.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <userDefaultRoot>
      <current-version-code>1.1</current-version-code>
      <downloaded-version-code></downloaded-version-code>
    </userDefaultRoot>

    current-version-code 指的是当前的本地的版本号。

    (这样,在应用每次检查更新的时候,就会读取这个版本号,用来跟服务器上的版本号进行比对,如果不一致,就下载

    (不存在是否版本号谁大谁小关系(源码就是这样写的)))

    downloaded-version-code 在下载zip资源文件成功时,设置此时服务器上面的版本号,

    紧接着,解压..........................解压完成后,立刻又将downloaded-version-code设置成空。

    所以在程序角度看,这个值永远是空值的。。(除非是已经下载了,但是没有解压。)

    这样做的好处是:。。。。我猜想,可能是设计者怕在解压的过程中,程序挂了,解压也没有完成。

    这样,downloaded-version-code 就有值了,也就是在服务器上下载的最新zip包的版本(本地也有对应的最新zip包)。

    下次当再次启动应用,请求服务器的时候,就不用下载zip包了,而是直接进入解压步骤。

    下载完成以后:

     1        // Record new version code.
     2             UserDefault::getInstance()->setStringForKey(this->keyOfVersion().c_str(), this->_version.c_str());
     3             
     4             // Unrecord downloaded version code.
     5             UserDefault::getInstance()->setStringForKey(this->keyOfDownloadedVersion().c_str(), "");
     6             UserDefault::getInstance()->flush();
     7             
     8             // Set resource search path.
     9             this->setSearchPath();
    10             
    11             // Delete unloaded zip file.
    12             string zipfileName = this->_storagePath + TEMP_PACKAGE_FILE_NAME;
    13             if (remove(zipfileName.c_str()) != 0)
    14             {
    15                 CCLOG("can not remove downloaded zip file %s", zipfileName.c_str());
    16             }
    17             
    18             if (this->_delegate) this->_delegate->onSuccess();

    上面的代码:记录当前本地的版本号:current-version-code

          删除已经下载的版本号:downloaded-version-code

          设置优先资源路径

          删除下载的zip资源文件

          发送通知消息,表明成功完成了下载解压更新。

    整个过程是只下载了一个zip更新。也就是属于一次性的更新。(整个过程只有一个userdefault.xml文件)

    考虑如果有多个模块需要更新呢...(~~~~~还是具体情况具体对待~~~~~~)

    嗯。over...学习了大神的代码~

  • 相关阅读:
    JQuery+Ajax+Ashx+Base64 data无法传递的问题
    用户 'IIS APPPOOL\DefaultAppPool' 登录失败。 的解决方案
    CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\4b49f661\23a749fc\App_Web_default.aspx.cdcab7d2.zii776dc.dl
    SQL 按月统计
    591  Box of Bricks
    10038 Jolly Jumpers
    113 Power of Cryptography
    10370 Above Average
    10189 Minesweeper
    136 Ugly Numbers 之“堆”的解法
  • 原文地址:https://www.cnblogs.com/vokie/p/4021724.html
Copyright © 2020-2023  润新知