1. 程式人生 > 實用技巧 >cocos2dx(4.0)學習筆記-2: 紋理快取,精靈幀快取,動畫快取以及幀動畫

cocos2dx(4.0)學習筆記-2: 紋理快取,精靈幀快取,動畫快取以及幀動畫

1.紋理快取的使用(TextureCache)

  紋理快取時cocos2dx中較為底層且常用的快取,通過提前將紋理圖片等等資源載入進記憶體方便之後呼叫。比如有些遊戲在不同場景的切換過程中可能會有一個讀條的場景,這個場景中通常就是將上一個場景中的不用的圖片從紋理快取中清楚掉並載入下一個場景中所需要用到的紋理資源到紋理快取當中。

1.1 新增紋理圖片到紋理快取中

1     cocos2d::TextureCache* texturecache = Director::getInstance()->getTextureCache();//紋理快取是全域性共享的一個單例,要使用首先要獲得其指標
2 const char file_path[100] = "D:\\image.png"; 3 texturecache->addImage(file_path);//將圖片讀取到紋理快取當中

  但當我們要載入較多第紋理資源的時候,這個時候就不能使用addImage方法去新增,否則會阻塞主執行緒使幀率降低甚至降到零,此時應該使用addImageAsync方法,具體實現如下

 1     std::vector<std::string> filename;//用於儲存每一張紋理資源的路徑
 2     getfilename(filename);//將需要載入的紋理圖片的路徑放入陣列中\
3 cocos2d::TextureCache* texturecache = Director::getInstance()->getTextureCache(); 4 size_t picturenum=0;//用於觀察載入完成了多少圖片 5 for(auto i : filename) { 6 texturecache -> addImageAsync(i, [&](Texture2D*){ 7 cocos2d::log(std::to_string(++picturenum).c_str());
8 };//函式的第一個引數是檔案路徑,第二個引數是一個引數為Texture2D*的函式,在該圖片載入完成後執行 9 }; 10 cocos2d::log("執行緒已全部啟動“);

  執行上述程式碼後我們可以在日誌輸出中看到日誌先列印了“執行緒已全部啟動”,然後開始逐個列印1,2,3.......。此時主執行緒並不會被阻塞,依舊在不斷的監聽事件,重繪場景。

1.2 從紋理快取中提取紋理圖片

1     cocos2d::TextureCache* texturecache = Director::getInstance()->getTextureCache();
2     cocos2d::Texture2D* texture = texturecache->getTextureForKey(filename);//使用加入快取時的檔名來提取紋理

2.精靈幀快取的使用(SpriteFrameCache)

未完待續