美文网首页
GCloud Puffer:游戏资源的动态下载

GCloud Puffer:游戏资源的动态下载

作者: 一剑卿心 | 来源:发表于2018-03-05 22:22 被阅读146次

    使用腾讯游戏服务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目录拷贝到工程目录中。

    apollo目录.png
    文件 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 目前没有用到

    四、接口实现

    1. 创建Puffer
    mGcloudPuffer = GCloud::CreatePuffer();
    mGcloudPuffer->Init(mPufferConfig, this);//这里的作用有2个:初始化,设置回调
    
    1. 在Update函数中更新Puffer状态
    mGcloudPuffer->Update(); // 更新Puffer
    
    1. 下载文件
    cu_uint32 fileID = mGcloudPuffer->GetFileId(resourcePath.c_str()); 
    cu_uint64 taskId = mGcloudPuffer->DownloadFile(fileID, false, priority); 
    
    1. 回调
      设置回调:
    mGcloudPuffer->Init(mPufferConfig, this); 
    

    实现回调接口: IGcloudPufferCallBack

    virtual void OnInitReturn() ; 
    virtual void OnInitProgress() ; 
    virtual void OnDownloadReturn() ; 
    virtual void OnDownloadProgress() ; 
    

    五、配置步骤

    1. 将整个资源包打包成一个.zip文件:resources.zip
    2. 上传resources.zip.


      上传资源.png
    3. 下载资源:这里下载的文件路径是相对的路径,不是直接下载resources.zip ;而是下载你解压后你的文件目录的相对路径。
    // mGcloudPuffer->DownloadFile("resources.zip") ;    //  错误下载方式
    mGcloudPuffer->DownloadFile("atlases/skill.png") ;
    
    Puffer下载文件测试.png
    1. 错误码
    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.
    

    相关文章

      网友评论

          本文标题:GCloud Puffer:游戏资源的动态下载

          本文链接:https://www.haomeiwen.com/subject/ebykfftx.html