cocos2d-x 3.9 異步動態加載

異步加載的資源有四類:
1.png    單個png的情況比較少
2.plist和png一起的打包資源
3.plist和pvr.ccz一起的打包資源
4.CocosStudio導出的.ExportJson後綴的動畫文件

再重複一遍加載機制:所有的資源是按序加載的,不可同時加載多個文件。執行異步加載的處理肯定是寫在void update(float f)中,做到按幀加載。
1.png的異步加載

?
1
2
Director::getInstance()->getTextureCache()->addImageAsync(reloadImages[curReloadImgNum],  
                CC_CALLBACK_1(LoadingScene::imageAsyncCallback,this));  



2.plist和png一起的打包資源
廢話不多,直接上方法,沒有加載plist的api,我們使用如1的方法加載png,然後在回調函數中加載plist。

?
1
2
Director::getInstance()->getTextureCache()->addImageAsync(reloadPlists[curReloadPlistNum]+"png",  
                CC_CALLBACK_1(LoadingScene::plistImageAsyncCallback,this));  



注意回調函數的參數,這是plist異步加載的關鍵,形參是png紋理。

?
1
2
3
4
5
6
voidLoadingScene::plistImageAsyncCallback(cocos2d::Texture2D* texture)  
{  
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPlists[curReloadPlistNum].append("plist"), texture);  
    curReloadPlistNum++;  
    loading = true;  
}  


3.plist和pvr.ccz一起的打包資源
類似2的方法。

?
1
2
3
4
5
6
7
8
Director::getInstance()->getTextureCache()->addImageAsync(reloadPvrPlists[curReloadPvrPlistNum] + "pvr.ccz",  
                CC_CALLBACK_1(LoadingScene::pvrPlistImageAsyncCallback,this));  
voidLoadingScene::pvrPlistImageAsyncCallback(cocos2d::Texture2D* texture)  
{  
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPvrPlists[curReloadPvrPlistNum].append("plist"), texture);  
    curReloadPvrPlistNum++;  
    loading = true;  
}  

4.CocosStudio導出的.ExportJson後綴的動畫文件
?
1
2
3
4
5
6
7
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync(reloadExportJsons[curReloadExportJsonNum],  
                this, schedule_selector(LoadingScene::jsonAsyncCallback));  
voidLoadingScene::jsonAsyncCallback(floatf)  
{  
    curReloadExportJsonNum++;  
    loading = true;  
}  



四種加載方法已經介紹完了,只要在update中做好按序加載就可以了。

如何優化內存,加載儘量少的資源?
我的這個場景叫LoadingScene,這是一箇中轉場景,既是切換兩個場景之間的過渡場景,用來釋放上一個場景的資源和預加載下一個場景資源。
在這個場景中,我們可以釋放掉cache中的所有文件,然後根據下個場景的內容來加載所需的文件。
還有一個小技巧關於異步加載exportJson的文件。這個異步加載,既可以加載動畫緩存,還可以把跟它一起的plist和png一起加載到緩存中,所有如果想加載plist,也可以把它們到成靜止的動畫,然後使用exportJson加載即可使用裏面的精靈。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章