美文网首页
cocos2dx 加载资源

cocos2dx 加载资源

作者: 程序猿老D | 来源:发表于2017-02-22 17:13 被阅读0次

resCount resTotal为文件统计,resTotal需在init中赋值,赋值大小必须与pathList文件夹下文件总和相等,否则会加载不全。
pathList中的路径为相对Resources文件夹下的路径,所以为了方便起见,不建议在Resources下直接存放资源文件

头文件

#ifndef LoadingScene_hpp
#define LoadingScene_hpp

#include <stdio.h>
#include "cocos2d.h"
class LoadingScene : public cocos2d::Layer
{
private:
    unsigned int resCount;
    unsigned int resTotal;
    std::list<std::string> pathList;
public:
    static cocos2d::Scene* createScene();
    virtual bool init();
    std::list<std::string> getFilesFromPath(std::string path);
    void loadResources();
    void loadCallback(cocos2d::Ref* pSender);

    CREATE_FUNC(LoadingScene);
};

#endif /* LoadingScene_hpp */

源文件

#include "LoadingScene.hpp"
//以下是遍历文件所需头文件
#include <sys/stat.h>
#include "dirent.h"
#include "unistd.h"

USING_NS_CC;

Scene* LoadingScene::createScene()
{
    auto scene = Scene::create();
    auto layer = LoadingScene::create();
    scene->addChild(layer);
    return scene;
}
bool LoadingScene::init()
{
    resCount = 0;
    resTotal = 100;
    pathList.clear();
    pathList.push_back("images");
    pathList.push_back("images/images2");
    this->loadResources();
    return true;
}
std::list<std::string> LoadingScene::getFilesFromPath(std::string path)
{
    std::list<std::string> files;
    std::string filePath = FileUtils::getInstance()->fullPathForFilename(path);
    DIR *dp;
    struct dirent *entry;
    struct stat statbuf;
    dp=opendir(filePath.c_str());
    chdir(filePath.c_str());
    while((entry=readdir(dp))!=NULL)
    {
        stat(entry->d_name,&statbuf);
        if(!S_ISREG(statbuf.st_mode))
            continue;
        files.push_back(path+"/"+entry->d_name);
    }
    return files;
}
void LoadingScene::loadResources()
{
    CCLOG("start loading");
    while(pathList.size()>0)
    {
        std::list<std::string> files=getFilesFromPath(pathList.back());
        while(files.size()>0)
        {
            Director::getInstance()->getTextureCache()->addImageAsync(files.back(), CC_CALLBACK_1(LoadingScene::loadCallback, this));
            CCLOG("loading %s",files.back().c_str());
            files.pop_back();
        }
        pathList.pop_back();
    }
}
void LoadingScene::loadCallback(cocos2d::Ref *pSender)
{
    resCount++;
    if (resCount == resTotal)
    {
        //加载完成就切换场景
    }
}

相关文章

  • cocos2dx 加载资源

    resCount resTotal为文件统计,resTotal需在init中赋值,赋值大小必须与pathList...

  • 资源加密和脚本加密

    主要是资源加密和脚本加密。cocos2dx版本3.10。 脚本加密 脚本加密主要是用cocos2dx自带的加密方法...

  • webkit资源加载机制

    资源加载器 1. 特定资源加载器,加载特定资源,比如image对应ImageLoader 2. 缓存机制的资源加载...

  • 在cocos2dx2.2.6游戏中嵌入Android的WebVi

    游戏需求参考:cocos2dx游戏嵌入iOS的UIWebView 安卓方面:实现WebView加载,隐藏,显示,移...

  • ET资源加载

    ET资源加载 结构 ResourcesComponent【资源组件】(用于加载资源)AssetsBundleLoa...

  • Spring IoC 体系分析

    一. 统一资源加载策略: Spring 将资源的定义和资源的加载区分出来资源描述接口: Resource资源加载规...

  • Kingfisher 加载 gif 图

    加载本地资源 2.加载网络资源

  • 加载资源

    @(javascript)[页面xrr] 加载资源 加载资源的形式 输入url(或跳转页面)加载html 加载静态...

  • 运行环境

    一、加载资源的形式 输入URL(或跳转页面)加载HTML 加载HTML中的静态资源 二、加载资源的过程 DNS解析...

  • 前端性能优化

    (1)懒加载与预加载 懒加载的场景 图片进入可视区域之后进行资源请求 减少无效资源的加载 并发加载的资源过多会阻塞...

网友评论

      本文标题:cocos2dx 加载资源

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