引言:
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);
解決:
文件: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
{
...
}
備註:
第一次發微博, 謝謝大家支持