自己程式用到的方式有
刪除舊檔
TextureCache::getInstance()->removeTextureForKey(avatarFileName); //檔名加路徑
//增加至CACHE中
SpriteFrameCache* cache = SpriteFrameCache::getInstance();
auto pNewSprite = Sprite::create(avatarFileName); //開檔載入
if (pNewSprite != nullptr)
{
auto pFrame = pNewSprite->getSpriteFrame();
cache->addSpriteFrame(pFrame, stInfo.FileName);
}
新檔案載入
//將大頭照載入cache 中
SpriteFrameCache* cache = SpriteFrameCache::getInstance();
auto pFrame = cache->getSpriteFrameByName(avatar);
if (pFrame == nullptr)
{ //檢查是否已經在cahce
auto pNewSprite = Sprite::create(fileName); //開檔載入
if (pNewSprite != nullptr)
{
TextureCache::getInstance()->removeTextureForKey(avatar);
//cache->addSpriteFramesWithFile(fileName);
pFrame = pNewSprite->getSpriteFrame();
cache->addSpriteFrame(pFrame, avatar);
}
}
if (pFrame != nullptr)
{
logFile(LOG_DEBUG, "Image name %s (%p)", avatar.c_str(), pFrame);
spritePersion->setSpriteFrame(pFrame);
return true;
}
參考文件資料
網路上常見的兩種方法
基本上網路上的做法為更換掉 Sprite 中的Texture, 或者將 SpriteFrame 中的DisplayFrame 換掉。
但必須得說, 這些做法都相對麻煩, 而且就效率來說與新建一張Sprite的成本, 差距不大。
但必須得說, 這些做法都相對麻煩, 而且就效率來說與新建一張Sprite的成本, 差距不大。
於是有些時候我會採用下面的做法。
新建一張Sprite, 將裡面的Texture貼回需要替換的Sprite
- 限制: 更換Sprite 的 Texture時, 需要注意如果是更新有相同名稱的圖檔時, 需要先將舊有的 Cache清除, 不然使用相同名稱時, 會取成舊有Cache中的 Texture檔
沒有留言:
張貼留言