Cocos2d-x 精灵图片预加载中不会出现重复加载问题-阿里云开发者社区

开发者社区> 技术小甜> 正文

Cocos2d-x 精灵图片预加载中不会出现重复加载问题

简介:
+关注继续查看

 为了应对大量精灵图片的加载问题,cocos2d-x提供了精灵数据的异步预加载机制,这是要是借助于CCTextureCache::addImageAsync函数来实现的。


    那么,当使用上述函数多次加载同一个精灵图片文件时,是否会出现加载多次呢?不会的。

    让我们来分析一下上述函数的关键部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
    }

注意上面代码中的这一句:

1
texture = (CCTexture2D*)m_pTextures->objectForKey(pathKey.c_str());

框架使用了字典机制,通过键-值对方式进行纹理数据匹配,而上面这个函数中的字符串正对应于我们关注的精灵文件名,而文件名是不变的(也就是说,当我们使用addImageAsync函数多次试图加载同一个精灵图片文件时),所以,不会出现多次试图加载同一个精灵图片文件而导致系统重复加载的问题。













本文转自朱先忠老师51CTO博客,原文链接: http://blog.51cto.com/zhuxianzhong/1540413,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
+关注
10146
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载