Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
from http://cn.cocos2d-x.org/tutorial/show?id=1277
本章只分享一下異步加載的邏輯,如有不對的地方還望大家及時指出。
目前我代碼中需要異步加載的資源一共有四類:
1.png,單個png的情況比較少
2.plist和png一起的打包資源
3.plist和pvr.ccz一起的打包資源
4.CocosStudio導出的.ExportJson后綴的動畫文件
再重復一遍加載機制:所有的資源是按序加載的,不可同時加載多個文件。執行異步加載的處理肯定是寫在void update(float f)中,做到按幀加載。
1.png的異步加載
Director::getInstance()->getTextureCache()->addImageAsync(reloadImages[curReloadImgNum],??CC_CALLBACK_1(LoadingScene::imageAsyncCallback,?this));2.plist和png一起的打包資源
廢話不多,直接上方法,沒有加載plist的api,我們使用如1的方法加載png,然后在回調函數中加載plist。
Director::getInstance()->getTextureCache()->addImageAsync(reloadPlists[curReloadPlistNum]+"png",??CC_CALLBACK_1(LoadingScene::plistImageAsyncCallback,?this));?
注意回調函數的參數,這是plist異步加載的關鍵,形參是png紋理。
void?LoadingScene::plistImageAsyncCallback(cocos2d::Texture2D*?texture)?? {??SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPlists[curReloadPlistNum].append("plist"),?texture);??curReloadPlistNum++;??loading?=?true;?? }?
3.plist和pvr.ccz一起的打包資源
類似2的方法。 
4.Cocos Studio導出的.ExportJson后綴的動畫文件
ArmatureDataManager::getInstance()->addArmatureFileInfoAsync(reloadExportJsons[curReloadExportJsonNum],??this,?schedule_selector(LoadingScene::jsonAsyncCallback));?? void?LoadingScene::jsonAsyncCallback(float?f)?? {??curReloadExportJsonNum++;??loading?=?true;?? }
四種加載方法已經介紹完了,只要在update中做好按序加載就可以了。
如何優化內存,加載盡量少的資源?
我的這個場景叫LoadingScene,這是一個中轉場景,既是切換兩個場景之間的過渡場景,用來釋放上一個場景的資源和預加載下一個場景資源。
在這個場景中,我們可以釋放掉cache中的所有文件,然后根據下個場景的內容來加載所需的文件。 這就需要我們做好配置工作,比如保衛蘿卜,下一關只有兩種塔,我們只加載這兩種塔的動畫即可,而不需要所有塔全部加載。
還有一個小技巧關于異步加載exportJson的文件。這個異步加載,既可以加載動畫緩存,還可以把跟它一起的plist和png一起加載到緩存中,所有如果想加載plist,也可以把它們到成靜止的動畫,然后使用exportJson加載即可使用里面的精靈。 
總結
以上是生活随笔為你收集整理的Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 三相全控tc787触发电路_典型定频空调
- 下一篇: where 1=1低效?
