diff --git a/cocos/2d/CCFontAtlasCache.cpp b/cocos/2d/CCFontAtlasCache.cpp index 8913ec734b05..1c7128d01c76 100644 --- a/cocos/2d/CCFontAtlasCache.cpp +++ b/cocos/2d/CCFontAtlasCache.cpp @@ -36,7 +36,7 @@ NS_CC_BEGIN std::unordered_map FontAtlasCache::_atlasMap; -#define ATLAS_MAP_KEY_BUFFER 255 +#define ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE 255 void FontAtlasCache::purgeCachedData() { @@ -60,15 +60,11 @@ FontAtlas* FontAtlasCache::getFontAtlasTTF(const _ttfConfig* config) useDistanceField = false; } - char tmp[ATLAS_MAP_KEY_BUFFER]; - if (useDistanceField) { - snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "df %.2f %d %s", config->fontSize, config->outlineSize, - realFontFilename.c_str()); - } else { - snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%.2f %d %s", config->fontSize, config->outlineSize, - realFontFilename.c_str()); - } - std::string atlasName = tmp; + std::string key; + char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE]; + snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, useDistanceField ? "df %.2f %d " : "%.2f %d ", config->fontSize, config->outlineSize); + std::string atlasName(keyPrefix); + atlasName += realFontFilename; auto it = _atlasMap.find(atlasName); @@ -95,9 +91,10 @@ FontAtlas* FontAtlasCache::getFontAtlasTTF(const _ttfConfig* config) FontAtlas* FontAtlasCache::getFontAtlasFNT(const std::string& fontFileName, const Vec2& imageOffset /* = Vec2::ZERO */) { auto realFontFilename = FileUtils::getInstance()->getNewFilename(fontFileName); // resolves real file path, to prevent storing multiple atlases for the same file. - char tmp[ATLAS_MAP_KEY_BUFFER]; - snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%.2f %.2f %s", imageOffset.x, imageOffset.y, realFontFilename.c_str()); - std::string atlasName = tmp; + char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE]; + snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, "%.2f %.2f ", imageOffset.x, imageOffset.y); + std::string atlasName(keyPrefix); + atlasName += realFontFilename; auto it = _atlasMap.find(atlasName); if ( it == _atlasMap.end() ) @@ -147,9 +144,9 @@ FontAtlas* FontAtlasCache::getFontAtlasCharMap(const std::string& plistFile) FontAtlas* FontAtlasCache::getFontAtlasCharMap(Texture2D* texture, int itemWidth, int itemHeight, int startCharMap) { - char tmp[30]; - sprintf(tmp,"name:%u_%d_%d_%d",texture->getName(),itemWidth,itemHeight,startCharMap); - std::string atlasName = tmp; + char key[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE]; + sprintf(key,"name:%u_%d_%d_%d",texture->getName(),itemWidth,itemHeight,startCharMap); + std::string atlasName = key; auto it = _atlasMap.find(atlasName); if ( it == _atlasMap.end() ) @@ -174,9 +171,10 @@ FontAtlas* FontAtlasCache::getFontAtlasCharMap(Texture2D* texture, int itemWidth FontAtlas* FontAtlasCache::getFontAtlasCharMap(const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap) { - char tmp[ATLAS_MAP_KEY_BUFFER]; - snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%d %d %d %s", itemWidth, itemHeight, startCharMap, charMapFile.c_str()); - std::string atlasName = tmp; + char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE]; + snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, "%d %d %d ", itemWidth, itemHeight, startCharMap); + std::string atlasName(keyPrefix); + atlasName += charMapFile; auto it = _atlasMap.find(atlasName); if ( it == _atlasMap.end() ) @@ -224,9 +222,10 @@ bool FontAtlasCache::releaseFontAtlas(FontAtlas *atlas) void FontAtlasCache::reloadFontAtlasFNT(const std::string& fontFileName, const Vec2& imageOffset/* = Vec2::ZERO*/) { - char tmp[ATLAS_MAP_KEY_BUFFER]; - snprintf(tmp, ATLAS_MAP_KEY_BUFFER, "%.2f %.2f %s", imageOffset.x, imageOffset.y, fontFileName.c_str()); - std::string atlasName = tmp; + char keyPrefix[ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE]; + snprintf(keyPrefix, ATLAS_MAP_KEY_PREFIX_BUFFER_SIZE, "%.2f %.2f ", imageOffset.x, imageOffset.y); + std::string atlasName(keyPrefix); + atlasName += fontFileName; auto it = _atlasMap.find(atlasName); if (it != _atlasMap.end())