本文仅供个人记录和复习,不用于其他用途
什么是缓存
缓存的目的就是:先将所需资源(如纹理图片)加载到内存中,之后再次使用该资源的时候,就可以直接从内存中取出,而不需要重新加载。从而减少了CPU和GPU的内存占用。
纹理缓存
如果游戏需要用到大量纹理图片,比如某个界面需要很多图片,那么可以使用TextureCache
。一旦纹理加载完成,下次使用时可使用它返回之前加载的纹理。我们所谓的精灵初始化方法,底层的实现都是将图片加入了纹理缓存。
|
|
addImage()
返回一个Texture2D
的引用,如果加入文件失败,则返回之前加入的图片。getTextureForKey()
是通过文件名来获取纹理对象,失败则返回nullptr
。
|
|
精灵帧缓存
精灵帧一般用于许多小图合成的大图,处理plist文件。所以,精灵帧的配套文件是一个.plist
文件和一张大图。精灵帧获取和销毁单例对象和纹理一样,这里不再赘述。
|
|
其他的方法在精灵帧一章讲的已经很详细了,这里之讲讲清除缓存的方法:
|
|
纹理、精灵帧、动画帧
精灵帧最开始是用于创建动画,而纹理是最底层也是最有效的图片存储。精灵帧实际上只有一张大图片,也就是一个纹理,它的.plist
会存储必要的位置信息,方便截取精灵图片。至于精灵帧和动画帧其实区别不大,不过我们最好认为动画帧是动画的属性,精灵帧只是精灵的属性,而不是将二者混为一谈。
动画缓存
创建动画时,基本的步骤是创建精灵帧,按顺序添加到数组,用Animation
读取数组创建动画,这个过程比较繁琐耗时。对于使用频率较高的动画,可以将它加载到动画缓存,要用时直接调用而不是重新加载。
|
|
addAnimation()
添加一段动画,并且为之取名,方便之后在缓存中提取这段动画。addAnimationsWithFile()
是通过plist文件来添加动画。getAnimation()
可以通过相对应的名字,提取动画,该方法返回Animation
类指针。removeAnimation()
用于移除指定动画。
|
|
上述代码简要的说明了如何创建动画并加入到缓存,同时从缓存中提取一段动画。
清理缓存顺序
按照由高到低来,先动画缓存,再精灵帧缓存,最后纹理缓存。