zoukankan      html  css  js  c++  java
  • cocos2d-x 2.2 资源更新AssetsManager例子代码

    转自:http://www.58player.com/blog-2327-601.html

    //
    //  UpgradeLayer.h
    //  AmazeDemo
    //
    //  Created by lsw on 14-3-26.
    //
    //
    
    #ifndef AmazeDemo_UpgradeLayer_h
    #define AmazeDemo_UpgradeLayer_h
    #include "cocos2d.h"
    #include "AssetsManager.h"
    
    class UpgradeLayer : public cocos2d::CCLayer, public cocos2d::extension::AssetsManagerDelegateProtocol
    {
    public:
        UpgradeLayer();
        virtual ~UpgradeLayer();
        
        static cocos2d::CCScene *scene();
        virtual bool init();
        
        void upgrade(cocos2d::CCObject *pSender);
        void reset(cocos2d::CCObject *pSender);
        
        /* @brief Call back function for error
         @param errorCode Type of error
         */
        virtual void onError(cocos2d::extension::AssetsManager::ErrorCode errorCode);
        /** @brief Call back function for recording downloading percent
         @param percent How much percent downloaded
         @warn This call back function just for recording downloading percent.
         AssetsManager will do some other thing after downloading, you should
         write code in onSuccess() after downloading.
         */
        virtual void onProgress(int percent);
        /** @brief Call back function for success
         */
        virtual void onSuccess();
        CREATE_FUNC(UpgradeLayer);
    private:
        cocos2d::extension::AssetsManager *getAssetManager();
        void initDownloadDir();
    private:
        std::string pathToSave;
        cocos2d::CCLabelTTF *_showDownloadInfo;
    };
    
    
    #endif
    
     
     
    //实现cpp 
    
    //
    //  UpgradeLayer.cpp
    //  AmazeDemo
    //
    //  Created by lsw on 14-3-26.
    //
    //
    
    #include "UpgradeLayer.h"
    
    #if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
    #include <dirent.h>
    #include <sys/stat.h>
    #endif
    
    USING_NS_CC;
    USING_NS_CC_EXT;
    using namespace std;
    
    UpgradeLayer::UpgradeLayer()
    :pathToSave("")
    ,_showDownloadInfo(NULL)
    {
        
    }
    
    UpgradeLayer::~UpgradeLayer()
    {
        AssetsManager *assetManager = getAssetManager();
        CC_SAFE_DELETE(assetManager);
    }
    
    CCScene* UpgradeLayer::scene()
    {
        CCScene *scene = CCScene::create();
        UpgradeLayer *layer = UpgradeLayer::create();
        scene->addChild(layer);
        return scene;
    }
    
    bool UpgradeLayer::init()
    {
        if (!CCLayer::init())
        {
            return false;
        }
        
        initDownloadDir();
        _showDownloadInfo = CCLabelTTF::create("", "Arial", 25);
        this->addChild(_showDownloadInfo);
        _showDownloadInfo->setAnchorPoint(ccp(0, 0));
        _showDownloadInfo->setPosition(ccp(20, 20));
        
        
        CCMenuItemLabel *itemLabel1 = CCMenuItemLabel::create(CCLabelTTF::create("reset", "Arail", 20), this, menu_selector(UpgradeLayer::reset));
        
        CCMenuItemLabel *itemLabel2 = CCMenuItemLabel::create(CCLabelTTF::create("upgrade", "Arail", 20), this, menu_selector(UpgradeLayer::upgrade));
        
        CCMenu *menu = CCMenu::create(itemLabel1, itemLabel2, NULL);
        this->addChild(menu);
        CCSize winSize = CCDirector::sharedDirector()->getWinSize();
        itemLabel1->setPosition(ccp(winSize.width/2, winSize.height/2 + 20));
        itemLabel2->setPosition(ccp(winSize.width/2, winSize.height/2 - 20));
        
        menu->setPosition(ccp(0, 0));
        
        return true;
    }
    
    void UpgradeLayer::onError(AssetsManager::ErrorCode errorCode)
    {
        if (errorCode == AssetsManager::kNoNewVersion)
        {
            _showDownloadInfo->setString("no new version");
        }
        else if (errorCode == AssetsManager::kNetwork)
        {
            _showDownloadInfo->setString("network err");
        }
    }
    
    void UpgradeLayer::onProgress(int percent)
    {
        char progress[20];
        snprintf(progress, 20, "download %d%%", percent);
        _showDownloadInfo->setString(progress);
    }
    
    void UpgradeLayer::onSuccess()
    {
        _showDownloadInfo->setString("download success");
    }
    
    AssetsManager* UpgradeLayer::getAssetManager()
    {
        static AssetsManager *assetManager = NULL;
        if (!assetManager)
        {
            assetManager = new AssetsManager("https://raw.github.com/minggo/AssetsManagerTest/master/package.zip",
                                             "https://raw.github.com/minggo/AssetsManagerTest/master/version",
                                             pathToSave.c_str());
            assetManager->setDelegate(this);
            assetManager->setConnectionTimeout(3);
        }
        return assetManager;
    }
    
    void UpgradeLayer::initDownloadDir()
    {
        pathToSave = CCFileUtils::sharedFileUtils()->getWritablePath();
        pathToSave += "tmpDir";
        
    #if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
        DIR *pDir = NULL;
        pDir = opendir(pathToSave.c_str());
        if (!pDir)
        {
            mkdir(pathToSave.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
        }
    #else
        if ((GetFileAttributesA(pathToSave.c_str())) == INVALID_FILE_ATTRIBUTES)
        {
        CreateDirectoryA(pathToSave.c_str(), 0);
        }
    #endif
    }
    
    void UpgradeLayer::reset(CCObject *pSender)
    {
        _showDownloadInfo->setString("");
        // Remove downloaded files
    #if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
        string command = "rm -r ";
        // Path may include space.
        command += """ + pathToSave + """;
        system(command.c_str());
    #else
        string command = "rd /s /q ";
        // Path may include space.
        command += """ + pathToSave + """;
        system(command.c_str());
    #endif
        getAssetManager()->deleteVersion();
        initDownloadDir();
    }
    
    void UpgradeLayer::upgrade(CCObject *pSender)
    {
        _showDownloadInfo->setString("");
        getAssetManager()->update();
        
    }
  • 相关阅读:
    redis五类型及原理|redis主从及问题|Uninstall Redis CentOs 7
    netty4与netty5序列化问题记录
    [转载]【深入Java虚拟机】之四:类加载机制
    序列化原理机制新谈
    [Eclipse使用技巧] Eclipse使用External Tools定位java 源文件目录路径
    学习vue的一些资源
    中国国内可用API合集
    适合初学者学习的的vue+webpack的小项目
    前端性能优化----yahoo前端性能团队总结的35条黄金定律
    Angular2优质学习资源收集
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/3708001.html
Copyright © 2011-2022 走看看