Poppin Games Engineer Blog

ポッピンゲームズジャパン株式会社のエンジニアのブログ。弊社製品やcocos2d-x、AWSに関する情報を中心に発信しております。

cocos2d-xとTrueTypeフォントとレンダラーとUTF8と絵文字の苦悶

cocos2d-xではver3系から、FreeTypeによるレンダリングとOSによるレンダリングが選べるようになりました。

iOSのレンダラーの場合、フォントにグリフが無いときは代替のフォントで補ってくれます。FreeTypeでは現状、その辺の処理はやってくれません。なので、カッコイイフォントを見つけてきていざ使おうとすると、絵文字が出ない! …なんてことが起こり得ます。

ではOSに任せるのがベストかというと、OSによってフォントの描画結果が違うというのがネックになってきます。また、Androidでは、TTFの描画がやや遅かったりします。

この辺を解消したい場合、一つの解決策は、FontForgeなどを使って、TTFファイルに自分で絵文字などを追加することでしょうか。

そうすると今度は、絵文字のデータはどっから用意するんだよ?という話になるのですが、googleのnoto ( https://www.google.com/get/noto/ ) や twitterのtwemoji ( https://github.com/twitter/twemoji ) がオープンソースで公開されています。

同様にUTF8を駆使した顔文字 ( o̖⸜((̵̵́ ̆͒͟˚̩̭ ̆͒)̵̵̀)⸝o̗ とか…)のためにUTF8のグリフをTTFファイルにどんどん足すぜ〜!といきたいのですが、TTFは現在の仕様では65,535グリフまでしか入れられません。

UTF8はすでにこれ以上の文字を定義しており…残念ながら1ファイルでUTF8をコンプリートするTTFファイルは作ることができないのでした。無念!

10年くらい前もLinuxローカライズでこういう問題と格闘した覚えがあるんですが、世の中うまくいかないもんですね。