使用腾讯游戏服务GCloud的Puffer系统实现游戏资源的动态下载.
应用场景:
游戏包为实现最小化,很多资源只能动态下载(运行时时刻
下载)。这里使用腾讯游戏服务GCloud的puffer系统。
一、下载SDK
http://10.185.17.231/apollo_dists/Apollo1.1.19.g.173293.Cocos.tar.gz
二、设置库文件
Apollo/Cocos的目录结构为:Adapters和Apollo
其中Adapters是MSDK,这里暂时用不到。
Apollo文件夹下的文件是Puffer相关的,Include是相应的头文件,Plugins是库文件。
将Apollo文件夹下表中的相应文件从sdk目录拷贝到工程目录中。
文件 | sdk目录 | 工程目录 |
---|---|---|
header | Include | WeCGame\libs\apollo\include |
apollo_static.lib | Plugins\Windows\X86\VS2013_MDd | WeCGame\libs\apollo\prebuilt\win32\Debug |
apollo.framework | Plugins\iOS | WeCGame\libs\apollo\prebuilt\ios |
libapollo.so | Plugins\Android\ApolloBase\libs\armeabi | WeCGame\libs\apollo\prebuilt\android\Apollo\armeabi |
Apollo.jar;ApolloCocos.jar | Plugins\Android\ApolloBase\libs | WeCGame\proj.android\libs |
Apollo.jar;ApolloCocos.jar | Plugins\Android\ApolloBase\libs | WeCGame\proj.AndroidStudio\WeCGame\libs |
三、初始化参数
参数 | 含义 | 说明 |
---|---|---|
uMaxDownloadSpeed | 最大下载速度 | 5x2014x1024 |
uMaxDownTask | 最大的任务数 | 比如5 |
uMaxDownloadsPerTask | 每个任务的最大下载数 | 比如3 |
uPufferProductId | Puffer的id,类似于渠道id | 在配置中使用 |
uNeedCheck | 版本更新时是否需要检验本地文件 | true |
strSourceDir | Puffer保存到本地的路径 | |
strPufferServerUrl | 服务器地址 | |
strPufferGroupMarkId | 区服id | 目前没有用到 |
strUserId | 用户id | 目前没有用到 |
四、接口实现
- 创建Puffer
mGcloudPuffer = GCloud::CreatePuffer();
mGcloudPuffer->Init(mPufferConfig, this);//这里的作用有2个:初始化,设置回调
- 在Update函数中更新Puffer状态
mGcloudPuffer->Update(); // 更新Puffer
- 下载文件
cu_uint32 fileID = mGcloudPuffer->GetFileId(resourcePath.c_str());
cu_uint64 taskId = mGcloudPuffer->DownloadFile(fileID, false, priority);
- 回调
设置回调:
mGcloudPuffer->Init(mPufferConfig, this);
实现回调接口: IGcloudPufferCallBack
virtual void OnInitReturn() ;
virtual void OnInitProgress() ;
virtual void OnDownloadReturn() ;
virtual void OnDownloadProgress() ;
五、配置步骤
- 将整个资源包打包成一个.zip文件:resources.zip
-
上传resources.zip.
上传资源.png - 下载资源:这里下载的文件路径是相对的路径,不是直接下载resources.zip ;而是下载你解压后你的文件目录的相对路径。
// mGcloudPuffer->DownloadFile("resources.zip") ; // 错误下载方式
mGcloudPuffer->DownloadFile("atlases/skill.png") ;
Puffer下载文件测试.png
- 错误码
ErrorCode | 含义 |
---|---|
7025 4639 | 连接版本服务器超时 |
7025 4604 | 设置的保存目录或临时目录不可用。 |
遇到的问题:
1. 初始化
这里犯了一个错误:
下载资源要等初始化成功之后,才能进行,但为了测试方便并没有考虑到这个问题,导致卡了好久。
2. 代理
代码完成后的测试,10次大概只有2次能够成功初始化,并下载。更多情况下会抛出初始化异常代码:7025 4639;求助SDK研发组的同学,得到的反馈是"Error:7025 4639=链接超时"。这就尴尬了,后面的偶然机会打开Proxifier代理软件后,发现这个问题居然好了:每次初始化和下载都能够特别快的完成。
跟研发组讨论,得到了答案:目前的puffer只部署在了测试环境,正式环境还没有部署。
3. CCDevice::getPufferPath
CCDevice.h文件中定义函数getPufferPath,并在CCDevice.cpp中实现,在Windows下和Android下都没有问题,但是在iOS下总是提示链接错误Linker Error:Undefined symbol : CCDevice::getPufferPath .
查找后发现CCDevice在iOS上要实现相应的CCDevice.mm文件。所以要在CCDevice.mm文件实现getPufferPath方法.
4. Android首次启动Puffer初始化一定会失败
错误码——70254604:设置的保存目录或临时目录不可用。非首次启动都可以成功初始化并下载。
解决方案为:首次启动时,判断Puffer目录是否存在,如果不存在,先创建,再初始化Puffer.
网友评论