0

我正在挠头,试图弄清楚为什么这个论点没有被正确传递。以下是相关代码,为简洁起见缩短:

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 上运行良好)但我不认为这是一个平台问题,它似乎太基础了。我比计划晚了两周并且压力很大,所以也许我错过了一些简单的事情。但我会很感激一些想法,这些想法可能会让我重新取得进步,而不是旋转我的车轮。

4

0 回答 0