關於Cocos2d-x2.1.x與CocosBuilder3.0a 的自動資源目錄擺放

引言:

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)

            {

               texture = CCTextureCache::sharedTextureCache()->addImage(spriteFile.c_str());

            }

           CCRect bounds = CCRectMake(0,0, texture->getContentSize().width, texture->getContentSize().height);

            spriteFrame =CCSpriteFrame::createWithTexture(texture, bounds);

        }

       else 

        {

...

}


經過以上的方案及代碼調整,便可以配合setSearchPaths輕鬆管理自動資源目錄了, 讓我們把資源有序的管理起來吧!

備註:

第一次發微博, 謝謝大家支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章