Cocos2d for iPhone のゲームで、iOS 標準ではない独自のフォントを使おうとしました。ゲームですからね。得点の表示とかは、ゲームっぽいフォントにしたいわけです。

ググると、以下をすればいいことがわかりました。 ・TTFファイルを Resourcesフォルダに置く(まあ、たぶんどこでもいいです) ・その TTFファイルを Xcode プロジェクトに追加する(フォルダに置くというのと同時にやってもいいはずです) ・info.plist にフォントを追加する。 ・フォントを使うときは、TTFファイル名ではなく、フォント名を指定する。

info.plist へのフォント追加は、こうやります。これは Cocos2d for iPhone 固有の手順ではなく、UIKit 一般の手順です。

CubicSansFont.ttf GF Fuffiger.ttf

</code>

実は Cocos 2D for iPhone は、以下のように内部的に UIFont を用いてフォントを探すので、上記が必要になるのです。

libs/cocos2d/CCTexture2D.m uifont = [UIFont fontWithName:name size:size];

#if CC_FONT_LABEL_SUPPORT if( ! uifont ) uifont = [[FontManager sharedManager] zFontWithName:name pointSize:size]; #endif // CC_FONT_LABEL_SUPPORT if( ! uifont ) { CCLOG(@”cocos2d: Texture2d: Invalid Font: %@. Verify the .ttf name”, name); [self release]; return nil; }

さて、info.plist で指定したフォントは、次のようにして使います。fontName: に指定するのは、ファイル名ではなくフォント名です。TTFファイルをダブルクリックすると開くはずの、Mac の Font Bookアプリのタイトルバーに表示される文字列を指定してください。

CCLabelTTF *time = [CCLabelTTF labelWithString:@"00:00" dimensions:CGSizeMake(100, 50) alignment:UITextAlignmentCenter fontName:@"CubicSans"];

ここまでやればいいはずなのですが、なぜかエラーがでます。

cocos2d: Texture2d: Invalid Font: CubicSans. Verify the .ttf name

[UIFont familyNames] でフォントの一覧を取得しても、CubicSans は出てきませんでした。困った。

実は、Xcodeプロジェクトの Build Phases タブの、Copy Bundle Resources に TTF ファイルを入れておく必要があったのです。これを指定しないと、ビルドしたバンドルにTTFファイルが含まれず、プログラムから探せなくなります。