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(_curl, CURLOPT_SSL_VERIFYPEER, 0L) 这句话要加在 downLoad()里
3.https://raw.github.com/minggo/AssetsManagerTest/master/package.zip 例子里的网址 https协议可能不被支持返回 1错误。
http://raw.github.com/minggo/AssetsManagerTest/master/package.zip
//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);//自己
AssetsManager下载类的更多相关文章
- 下载类网站的SEO优化方面技巧
在互联网国际中有一类十分主要的网站,那即是供应各种软件下载的网站,这类网站可以协助用户解决许多软件运用方面的疑问,可是随着知识产权维护的认识越来越强,许多下载类网站也要开端改动自个的经营策略,这么才可 ...
- WorldWind源码剖析系列:网络下载类WebDownload
网络下载类WebDownload封装了对请求的瓦片进行网络下载的相关操作.该类使用了两个委托类型和一个枚举类型. 该类的类图如下. 网络下载类WebDownload各个字段和属性的含义说明如下: st ...
- curl多线程下载类
<?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array () ...
- iOS7 中的新加入的下载类NSURLSession(随ios版本更新而更新)
想详细的了解网络下载的相关知识,要仔细阅读URL Loading System Programming Guide 这里有篇好文章(http://www.shinobicontrols.com/blo ...
- iOS NSURLSession 封装下载类
周六日鼓捣NSURLSession,效率虽然低下,最后还是有了一点点眉目.昨天和汤老师一起测试,又对它加深了一点理解.趁热打铁,先总结一下. 封装的类,对外用的方法,我写的是类方法,所以,在类方法中, ...
- 使用AFNetworking第三方下载类
AFNetworking 眼下使用比較多得一个下载库 眼下一直在维护更新,使用的是很easy 不须要加入不论什么关联的库 1.带block形式 内部是任务队列进行下载 就是对operation的一 ...
- 实现断点续传的FTP下载类(支持多线程多任务下载)
using System; using System.Collections.Generic; using System.Text; using System.Threading; using Sys ...
- c实现的iOS http下载类。支持自己设定http 头(比如cookie等)
也许有人要问为什么要自己用c写? 原因是: 1 我是菜鸟 2 我最最初选择了AsyncSocket,弄了很久,基本上稳定了,但有时候出现了数据不完整,但我又没办法在这个时候识别到并重试:所以不完美,最 ...
- 使用LR编写下载类脚本
如何下载并保存文件到本地,实现文件下载的脚本制作.以下是本人测试某系统总结整理的脚本,仅供参考. #include "lrs.h" Action() { // 示例一: //第一种 ...
随机推荐
- 原型模式--prototype
C++设计模式——原型模式 什么是原型模式? 在GOF的<设计模式:可复用面向对象软件的基础>中是这样说的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.这这个定义中,最 ...
- shell 内网主机存活探测器
最近在学习shell 编程,闲来无事,搞了一个小shell. 可以用来 对一个网段的存活主机进行 探测. #!/bin/bash # #// #blog:www.cnblogs.com/outline ...
- Hadoop学习笔记1---简介 优点 架构分析
一.Hadoop简介 Hadoop最早起源于Nutch.Nutch是一个开源的网络搜索引擎,由Doug Cutting于2002年创建.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取. ...
- 轻松学习Linux之认识Shell
Shell是一个命令解释器提供了用户与内核进行交互操作的一种接口shell,编程对於系统管理员或是一般使用者都相当有用,除了自动化,还可写出一些有趣的小工具,Linux本身有各种版本一 ...
- Spring中的BeanUtils与apache commons中的BeanUtils用法[1]
1. 前言 在开发过程中,经常遇到把要给一个bean的属性赋给另外一个bean.最笨的方法是每个属性都单独写一个,聪明的方法是应用反射写一个工具方法.考虑到这个需求基本每个程序员都会遇到,那么一定已经 ...
- codeforces 644A Parliament of Berland
A. Parliament of Berland time limit per test 1 second memory limit per test 256 megabytes input stan ...
- OSPF虚链路配置.示例1
在OSPF 网络中,区域0为骨干区域,其它的为非骨干区域,非骨干区域必须与骨干区域直接相连. 根据拓扑图可看到区域1与骨干区域0直接相连而区域2与骨干区域没有直接相连,这种情况下我们可以创建一条虚 ...
- oracle存储过程返回数据集结果
MSSQL的存储过程返回数据集好简单,直接SELECT 就可以. ORACLE的存储过程返回数据集必须通过游标. 创建ORACLE存储过程 create or replace procedure cx ...
- 购买咏南中间件送客户端C/S和B/S开发框架
购买咏南DATASNAP中间件送CS插件开发框架和BS开发框架,CS.BS开发框架共享同一个中间件.价格从优! 中间件可供DELPHI6~DELPHI XE8开发的客户端调用! CS开发框架截图: B ...
- 了解 JavaScript 中的内置对象
所有编程语言都具有内部(或内置的)对象来创建 语言的基本功能.内部对象是 您编写自定义代码所用语言的基础, 该代码基于您的想象实现自定义功能.JavaScript 有许多 将其定义为语言的内部对象.本 ...