您的位置:首页 > 移动开发 > Cocos引擎

关于Cocos2d-x2.1.x与CocosBuilder3.0a 的自动资源目录摆放

2014-04-16 17:27 344 查看


关于Cocos2d-x2.1.x与CocosBuilder3.0a 的自动资源目录摆放

分类: 移动游戏 cocos2d-x2013-04-25
15:32 853人阅读 评论(1) 收藏 举报

目录(?)[+]

引言:

ccb3.0的例子中, 有两个clickme  的图片, 均放到了根目录的resources-auto 中

ccb会自动把这些资源缩到X售到发行目录resources-iphone 等等中

为我们开发多平台多设备提供了非常便利的支持,本书书说简短,感谢两个字我就不说了, 怪占篇幅的!

方案:

但是文件多了的话, CCB中会显的比较乱, 所以我需要在ccb的资源中创建目录, 把每个场景的资源分开来

注意:resources-auto中不支持创建子目录, 所以

我们在CCB的根目录下创建一个新的场景目录,并在该目录下创建resources-auto目录,然后把要缩放的资源放到这个目录中

这下CCB就可以将我们的资源自动缩放到不同的目录下了!!!

问题:

但是在程序中,还有一个问题,由于在

CCB中编译的资源被重定向到了子目录中如:LoginScene/xxxxxx.png ,而

自动目录确在文件夹:LoginScene/resources-iphone/xxxxxx.png 中, 所以程序启动的时候又找不到这个资源了, 既使我们设置程序目录

vecFindPath.push_back("Published-iOS/LoginScene/resources-iphone");

CCFileUtils::sharedFileUtils()->setSearchPaths(vecFindPath);

也同样定位不到这个目录中, 中间多了一级resources-iphone目录, 本人查了许多地方也没有找到哪里能设置这块, 所以本人直接修改了引擎的几行代码简单解决了一下!

解决:

文件:CCNodeLoader.cpp
函数:CCNodeLoader::parsePropTypeSpriteFrame()
原资源找不到的报错代码:
            spriteFile = pCCBReader->getCCBRootPath() + spriteFile;
           CCTexture2D * texture = CCTextureCache::sharedTextureCache()->addImage(spriteFile.c_str());
            CCRect bounds =CCRectMake(0,0,
texture->getContentSize().width, texture->getContentSize().height);  <--这里空指针异常
            spriteFrame =CCSpriteFrame::createWithTexture(texture, bounds);
修正后的重定向资源代码:

        if (spriteSheet.length() == 0)
        {
            spriteFile = pCCBReader->getCCBRootPath() + spriteFile;

            //查找根目录,(自动资源已通过setSearchPaths重定向到相对根目录) 另外注意这里要优先找我们的目录,否则加载效率会大降
            char*p = strrchr(spriteFile.c_str(), '/')+1;
            std::string spriteFileAuto = pCCBReader->getCCBRootPath()
+ p;
            CCTexture2D * texture = CCTextureCache::sharedTextureCache()->addImage(spriteFileAuto.c_str());
            if(texture==NULL)
            {
                CCTextureCache::sharedTextureCache()->addImage(spriteFile.c_str());
            }
            CCRect bounds = CCRectMake(0, 0,
texture->getContentSize().width, texture->getContentSize().height);
            spriteFrame = CCSpriteFrame::createWithTexture(texture, bounds);
        }
        else 
        {
...
}

经过以上的方案及代码调整,便可以配合setSearchPaths轻松管理自动资源目录了, 让我们把资源有序的管理起来吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: