我正在挠头,试图弄清楚为什么这个论点没有被正确传递。以下是相关代码,为简洁起见缩短:
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 上运行良好)但我不认为这是一个平台问题,它似乎太基础了。我比计划晚了两周并且压力很大,所以也许我错过了一些简单的事情。但我会很感激一些想法,这些想法可能会让我重新取得进步,而不是旋转我的车轮。