cocos中SpriteFrameCache和TextureCache加载图片相关代码

Published: 11 Nov 2014 Category: 游戏研发

在SpriteFrameCache中,添加Plist大图到cache的函数提供了三个,分别如下:


    /** Adds multiple Sprite Frames from a plist file.
     * A texture will be loaded automatically. The texture name will composed by replacing the .plist suffix with .png
     * If you want to use another texture, you should use the addSpriteFramesWithFile(const std::string& plist, const std::string& textureFileName) method.
     */
    void addSpriteFramesWithFile ( const std ::string & plist );

根据plist文件,添加SF。

寻找png方法:

首先去plist文件中查找textureFileName字段(一般都有)

如果没有将plist文件名加上png,作为textureFileName去添加。


    /** Adds multiple Sprite Frames from a plist file. The texture will be associated with the created sprite frames. */
    void addSpriteFramesWithFile ( const std ::string & plist , const std:: string & textureFileName );

该函数不去plist文件中查找textureFileName


    /** Adds multiple Sprite Frames from a plist file. The texture will be associated with the created sprite frames. */
    void addSpriteFramesWithFile ( const std ::string & plist, Texture2D * texture);

此函数根据一个已经生成的texture添加SF。

总结:

所有的addSpriteFramesWithFile都需要提供plist文件,区别只是提供texture的方式。

前两个函数通过自己的机制找到了texturePath以后,调用:

Texture2D *texture = Director::getInstance()->getTextureCache()->addImage(texturePath.c_str());

根据plist文件生成dict保存plist信息,三个函数最终都会调用addSpriteFramesWithDictionary(dict, texture);保存到SFcache中。

此外,SpriteFrameCache中,保存已经加载过的plist文件名_loadedFileNames,如果加载过就不再加载。


纹理Cache中下面的函数用于添加图片文件

Texture2D TextureCache::addImage(const std::string &path)

返回添加后的texture

首先去TextureCache中寻找fullpath为key的元素,如果存在说明这个textureFile已经添加过,就不再添加了。

    auto it = _textures.find(fullpath);
    if( it != _textures.end() )
        texture = it->second;