最近在自学cocos2d-x,在这总结下cocos2d-x中缓存的使用
不管是游戏背景还是人物精灵还是动画,都是一张张的图片,要想使用这些图片,我想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 );
运行动画。
好了,很简单的描述,因为我理解的也不够深刻,在此记下,以后备用。