首页 > 代码库 > Cocos2d-x 精灵图片预加载中不会出现重复加载问题
Cocos2d-x 精灵图片预加载中不会出现重复加载问题
为了应对大量精灵图片的加载问题,cocos2d-x提供了精灵数据的异步预加载机制,这是要是借助于CCTextureCache::addImageAsync函数来实现的。
那么,当使用上述函数多次加载同一个精灵图片文件时,是否会出现加载多次呢?不会的。
让我们来分析一下上述函数的关键部分代码:
void CCTextureCache::addImageAsync(const char *path, CCObject *target, SEL_CallFuncO selector) { #ifdef EMSCRIPTEN CCLOGWARN("Cannot load image %s asynchronously in Emscripten builds.", path); return; #endif // EMSCRIPTEN CCAssert(path != NULL, "TextureCache: fileimage 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函数多次试图加载同一个精灵图片文件时),所以,不会出现多次试图加载同一个精灵图片文件而导致系统重复加载的问题。
本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/1540413
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。