博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2d-x 精灵图片预加载中不会出现重复加载问题
阅读量:6638 次
发布时间:2019-06-25

本文共 1147 字,大约阅读时间需要 3 分钟。

 为了应对大量精灵图片的加载问题,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,如需转载请自行联系原作者

你可能感兴趣的文章
Block的定义,以及使用
查看>>
Gimp制作圆角透明图片
查看>>
将图片保存到照片相册中
查看>>
利用CSS3制作网页动画
查看>>
JS将图片转为base64
查看>>
前端面试题二十二
查看>>
SPOJ - VISIBLEBOX [multiset的使用]
查看>>
构建之法阅读笔记
查看>>
window 10 + python3.6 +numpy+ tensorflow + pycharm
查看>>
使用bootstrap validator异步提交,出现提交两次问题!
查看>>
EntityFramework Core迁移时出现数据库已存在对象问题解决方案
查看>>
MVC 5 App 通过 Facebook OAuth2 登陆(Sign-on)的问题
查看>>
2.7.3版本hadoop之HDFS环境搭建之浅谈
查看>>
seaweddfs配置不定时更新
查看>>
日期格式化,moment.js
查看>>
使用PowerShell批量注册DLL到GAC
查看>>
谴责盛大Bambook 的ADB.EXE流氓进程
查看>>
R语言使用马尔可夫链Markov Chain, MC来模拟抵押违约
查看>>
时间戳
查看>>
和为S的连续正数序列
查看>>