この引数が正しく渡されない理由を突き止めようと頭を悩ませています。簡潔にするために短縮された関連コードを次に示します。
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 の単なるマクロです) の出力は、その理由を示しています。以下は、4 つのラベルに対してフォント 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
ご覧のとおり、2 番目以外のすべての pFontName は、initWithString によって渡されてから getBitmap によって受信されるまでの間、何らかの形で空になっています。しかし、理由はわかりません。さらに紛らわしいのは、いつ機能し、いつ機能しないかが完全にランダムであることです。私はこれを WebOS 用にコンパイルしていますが、他のプラットフォームでは発生しないようです (実際、数日前に WebOS で問題なく動作しました) が、プラットフォームの問題ではないと思います。基本的すぎるようです。予定より 2 週間遅れており、ストレスがたまっているので、何か簡単なことを見逃しているのかもしれません。しかし、車輪を回転させるのではなく、進歩に戻ることができるいくつかのアイデアをいただければ幸いです.