我正在试图弄清楚为什么这个论点没有被正确传递。以下是相关代码,为简洁起见缩短:
bool CCImage::initWithString(
const char * pText,
int nWidth/* = 0*/,
int nHeight/* = 0*/,
ETextAlign eAlignMask/* = kAlignCenter*/,
const char * pFontName/* = nil*/,
int nSize/* = 0*/)
{
do
{
BitmapDC &dc = sharedBitmapDC();
const char* pFullFontName = CCFileUtils::fullPathFromRelativePath(pFontName);
CCLog("font is %s\n", pFullFontName);
dc.getBitmap(pText, nWidth, nHeight, eAlignMask, pFullFontName, nSize);
}
bool getBitmap(const char *text, int nWidth, int nHeight, CCImage::ETextAlign eAlignMask, const char * pFontName, float fontSize) {
FT_Face face;
FT_Error iError;
bool bRet = false;
if (libError) {
return false;
}
do {
iError = FT_New_Face( library, pFontName, 0, &face );
CCLog("error is %d font is %s\n", iError, pFontName);
if (iError) {
iError = FT_New_Face( library, "/usr/share/fonts/arial.ttf", 0, &face );
}
}
大约20%的时间,字体显示正确。其余的时间在第一次FT_NEW_FACE失败后显示为arial。 CCLogs的输出(它只是printf的一个宏)显示了原因。以下是尝试为四个标签加载字体Abduction的输出:
font is ./Res/fonts/Abduction.ttf
error is 1 font is
font is ./Res/fonts/Abduction.ttf
error is 0 font is ./Res/fonts/Abduction.ttf
font is ./Res/fonts/Abduction.ttf
error is 1 font is
font is ./Res/fonts/Abduction.ttf
error is 1 font is
正如你所看到的,除了第二个之外的所有pFontName在被initWithString传递并被getBitmap接收之间以某种方式被清空。但我不确定为什么。更令人困惑的是,它是完全随机的,它会起作用,什么时候不起作用。我正在为WebOS编译它,它似乎没有发生在其他平台上(事实上,它在几天前在WebOS上运行良好)但我不认为它是一个平台问题,它似乎太基础了。我比计划落后两周并且很努力,所以也许我错过了一些简单的事情。但我很欣赏一些可能让我重新取得进步而不是转动轮子的想法。