我正在尝试用 SDL_ttf 制作字体字典,就像我用 SDL_image 制作字典一样。由于字体是用 a 存储的,所以pnt_size
我制作了一个包含以下信息的结构:
struct fontinfo
{
string assetname;
int size;
};
其次是两个字典:
map<string, SDL_Surface*> imageDictionary;
map<fontinfo*, TTF_Font*> fontDictionary;
两者的区别在于字体字典不仅需要包含文件的字符串,还需要包含字体的大小。
然后,当对象请求图像或字体时,它会为其调用get
函数。现在getSprite
工作正常:
SDL_Surface* ResourceManager::getSprite(string assetname)
{
if (assetname == "")
return NULL;
map<string, SDL_Surface*>::iterator it = imageDictionary.find(assetname);
if (it != imageDictionary.end())
return it->second;
else
{
SDL_Surface* image = Load_Image(assetname);
if (image != NULL)
imageDictionary.insert(make_pair(assetname, image));
return image;
}
}
该getFont
方法几乎相同,除了它使用 afontinfo
而不是 a string
:
TTF_Font* ResourceManager::getFont(string assetname, int size)
{
if (assetname == "" || size < 0)
return NULL;
fontinfo* info = new fontinfo();
info->assetname = assetname;
info->size = size;
map<fontinfo*, TTF_Font*>::iterator it = fontDictionary.find(info);
if (it != fontDictionary.end())
return it->second;
else
{
TTF_Font* font = Load_Font(assetname, size);
if (font != NULL)
fontDictionary.insert(make_pair(info, font));
return font;
}
}
编译器告诉我identifier not found并且make_pair
未定义,但仅适用于make_pair
from 的函数getFont
。make_pair
in没有问题getSprite
。