溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

十:Cocos2d-x緩存機制

發(fā)布時間:2020-06-21 20:57:40 來源:網絡 閱讀:769 作者:lambdaX 欄目:游戲開發(fā)

Sprite中圖片加載會占用內存,而多次使用同一個圖片精靈時,會使用到緩存機制。 還有有多個角色,多個怪物,多個動作時,要怎么利用內存的緩存機制。


1. 紋理緩存(圖片緩存)  CCTexture2D.h  (整個引擎只有一個)

        以文件名創(chuàng)建精靈時,其實還是要先加載成CCTexture2D,也可以直接用CCTexture2D創(chuàng)建。CCTexture2D有機制實現(xiàn)緩存。

  1. bool CCSprite::initWithFile(const char *pszFilename)

  2. {

  3.     CCAssert(pszFilename != NULL, "Invalid filename for sprite");


  4.     CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);

  5.     if (pTexture)

  6.     {

  7.         CCRect rect = CCRectZero;

  8.         rect.size = pTexture->getContentSize();

  9.         return initWithTexture(pTexture, rect);

  10.     }


  11.     // don't release here.

  12.     // when load texture failed, it's better to get a "transparent" sprite then a crashed program

  13.     // this->release(); 

  14.     return false;

  15. }

  16. for(int i=0; i<9999; i++)

  17. {

  18. CCSprite* mysprite = CCSprite::create("CloseSelected.png");

  19. mysprite->setPosition( ccp (CCRANDOM_0_1()*480,CCRANDOM_0_1()*320) );

  20. this->addChild(mysprite,1);

  21. }

  22. for(int i=0; i<99; i++)

  23. {

  24. CCSprite* mysprite = CCSprite::create("CloseSelected.png");

  25. mysprite->setPosition(ccp(CCRANDOM_0_1()*480,CCRANDOM_0_1()*320));

  26. this->addChild(mysprite,1);

  27. }

  28. 精靈幀緩存(動畫幀)

  29. CCSpriteBatchNode* batchSprite = CCSpriteBatchNode::create("CloseSelected.png");

  30. batchSprite->setPosition(CCPointZero);

  31. this->addChild(batchSprite,1);

  32. for (int i = 0; i<99 ; i++)

  33. {

  34. CCSprite* mysprite2 = CCSprite::createWithTexture(batchSprite->getTexture());

  35. mysprite2->setPosition(ccp(CCRANDOM_0_1()*360,CCRANDOM_0_1()*240));

  36. this->addChild(mysprite2,1);

  37. }


CCSpriteBatchNode,批精靈創(chuàng)建,可以認為是一個精靈容器。


3.動畫緩存

    采用地圖編輯器,將小圖片編輯到一張大圖片上,然后生成一張大圖片和對應的plist文件。

    在plist文件中存放的每一幀都是一張小圖片,在plist中旋轉的圖片在作為幀被使用時會自動還原。

    plist文件中每一幀的文件仍是源文件的名字,加載時使用小圖片的名字即可,而且源文件被刪除也不影響plist文件的使用。







緩存機制

CCSpriteCCTexture2D
CCTextureCache




CCSpriteBatchNodeCCTextureAtlas
CCTextureCache






CCAnimation

CCAnimationFrame

CCSpriteFrameCCSpriteFrameCache



CCAnimationCache


CCTexturePcaker



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI