您好,登錄后才能下訂單哦!
為了應對大量精靈圖片的加載問題,cocos2d-x提供了精靈數據的異步預加載機制,這是要是借助于CCTextureCache::addImageAsync函數來實現的。
那么,當使用上述函數多次加載同一個精靈圖片文件時,是否會出現加載多次呢?不會的。
讓我們來分析一下上述函數的關鍵部分代碼:
void CCTextureCache::addImageAsync(const char *path, CCObject *target, SEL_CallFuncO selector) { #ifdef EMSCRIPTEN CCLOGWARN("Cannot load p_w_picpath %s asynchronously in Emscripten builds.", path); return; #endif // EMSCRIPTEN CCAssert(path != NULL, "TextureCache: filep_w_picpath MUST not be NULL"); CCTexture2D *texture = NULL; // optimization std::string pathKey = path; pathKey = CCFileUtils::sharedFileUtils()->fullPathForFilename(pathKey.c_str()); texture = (CCTexture2D*)m_pTextures->objectForKey(pathKey.c_str()); std::string fullpath = pathKey; if (texture != NULL) { if (target && selector) { (target->*selector)(texture); } return; }
注意上面代碼中的這一句:
texture = (CCTexture2D*)m_pTextures->objectForKey(pathKey.c_str());
框架使用了字典機制,通過鍵-值對方式進行紋理數據匹配,而上面這個函數中的字符串正對應于我們關注的精靈文件名,而文件名是不變的(也就是說,當我們使用addImageAsync函數多次試圖加載同一個精靈圖片文件時),所以,不會出現多次試圖加載同一個精靈圖片文件而導致系統重復加載的問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。