我所理解的TextureCache,SpriteFrameCache,AnimationCache
2016-05-26 21:35
435 查看
最近在自学cocos2d-x,在这总结下cocos2d-x中缓存的使用
不管是游戏背景还是人物精灵还是动画,都是一张张的图片,要想使用这些图片,我想cocos2d-x 底层是应用openGL纹理贴图方式,将图片加载如内存。以上三种缓存机制,都是为了减少内存的多次读写,来提高游戏效率(本人菜鸟,有不对的望指出–)
1、TextureCache:
纹理缓存,最基本的缓存,SpriteFrameCache,AnimationCache这两个都是以纹理缓存为基础的。
跟过代码:
纹理缓存是通过这句将图片加入缓存,生成Texture2D对象,此时就可通过次对象创建精灵
这里的图片可以是单个精灵图片,也可以是plist文件对应的拼图,
addImage的原理就不说了,因为我也不知道。。
SpriteFrameCache:
精灵帧缓存,通常是加载plist文件与拼图:
跟进这句源码,可以看到也是先使用TextureCache缓存加载图片
此句是plist文件与 Texture2D对象的对应,plist文件中记录了拼图中你所要找的图片的信息,包括位置、大小,名字等。
这样就可以通过
来创建精灵,比起一张一张图片创建要快的多,因为图片是一次加载进来的嘛。
AnimationCache:
动画缓存,跟了下源码,感觉这个简单,
就是把创建好的动作序列,加入一个MAP,name为MAP的key值,
使用这个key值就可以找到该动作序列(CCAnimation):
然后:
创建动画 CCAnimate 才是真正的动画,
最后:
运行动画。
好了,很简单的描述,因为我理解的也不够深刻,在此记下,以后备用。
不管是游戏背景还是人物精灵还是动画,都是一张张的图片,要想使用这些图片,我想cocos2d-x 底层是应用openGL纹理贴图方式,将图片加载如内存。以上三种缓存机制,都是为了减少内存的多次读写,来提高游戏效率(本人菜鸟,有不对的望指出–)
1、TextureCache:
纹理缓存,最基本的缓存,SpriteFrameCache,AnimationCache这两个都是以纹理缓存为基础的。
跟过代码:
Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(texturePath.c_str());
纹理缓存是通过这句将图片加入缓存,生成Texture2D对象,此时就可通过次对象创建精灵
CCSprite::createWithTexture(texture)
这里的图片可以是单个精灵图片,也可以是plist文件对应的拼图,
addImage的原理就不说了,因为我也不知道。。
SpriteFrameCache:
精灵帧缓存,通常是加载plist文件与拼图:
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("*.plist");
跟进这句源码,可以看到也是先使用TextureCache缓存加载图片
addSpriteFramesWithDictionary(dict, texture);
此句是plist文件与 Texture2D对象的对应,plist文件中记录了拼图中你所要找的图片的信息,包括位置、大小,名字等。
这样就可以通过
CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->getSpriteFrameByName("background.png"));
来创建精灵,比起一张一张图片创建要快的多,因为图片是一次加载进来的嘛。
AnimationCache:
动画缓存,跟了下源码,感觉这个简单,
void AnimationCache::addAnimation(Animation *animation, const std::string& name) { _animations.insert(name, animation); }
就是把创建好的动作序列,加入一个MAP,name为MAP的key值,
使用这个key值就可以找到该动作序列(CCAnimation):
CCAnimation* panimation = CCAnimationCache::sharedAnimationCache()->animationByName("keyAnimotion");
然后:
CCAnimate* aimate = CCAnimate::create(panimation);
创建动画 CCAnimate 才是真正的动画,
最后:
psprite->runAction(aimate );
运行动画。
好了,很简单的描述,因为我理解的也不够深刻,在此记下,以后备用。
相关文章推荐
- GetChar缓存机制深入剖析
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- 使用C++进行Cocos2d-x游戏开发入门过程中的要点解析
- Cocos2d-x的内存管理总结