日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的方法。

Director::getInstance()->getTextureCache()->addImageAsync(reloadPvrPlists[curReloadPvrPlistNum]?+?"pvr.ccz",??CC_CALLBACK_1(LoadingScene::pvrPlistImageAsyncCallback,?this));?? void?LoadingScene::pvrPlistImageAsyncCallback(cocos2d::Texture2D*?texture)?? {??SpriteFrameCache::getInstance()->addSpriteFramesWithFile(reloadPvrPlists[curReloadPvrPlistNum].append("plist"),?texture);??curReloadPvrPlistNum++;??loading?=?true;?? }


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 异步动态加载 -- 保卫萝卜开发总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。