cocos2dxでフォント表示をする場合、TrueTypeのCCLabelTTFとビットマップフォントのCCLabelBMFontが使える。ビットマップフォントを使う場合、.fntファイルというものが必要になる。
ビットマップフォントと.fntを作るツールとしてはGlyph Designerなどのツールがある(NGUI 向けのビットマップフォントを作成出来るアプリ一覧 - 強火で進め)。.fntファイルのフォーマットの正式な仕様は知らないけど、[Cocos2d-X] CCLabelBMFont で使用する .fnt ファイルの仕様 | 学習A4デスノート @ Cocos2d-x とかの勉強メモのような構成になっている。
でオールドタイプとしては固定ピッチで1枚に固められた(下のような)画像を使ってフォント表示をしたいんだけど、こういった場合でもCCLabelBMFont
には.fntファイルが必要となる。
でもそのためにわざわざ新しいツールとか使いたくない…ので.fntをでっちあげるスクリプトを作った:
#!/usr/bin/ruby
font_image_file_name = ARGV.shift || 'font.png' fontw = ARGV.shift || 8 fonth = ARGV.shift || 8 cols = ARGV.shift || 16 rows = ARGV.shift || 6 start = ARGV.shift || 32
puts <<EOD info face="" size=0 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=1,1 common lineHeight=#{fonth} base=0 scaleW=10 scaleH=100 pages=1 packed=0 page id=0 file="#{font_image_file_name}"
chars count=#{rows * cols} EOD
rows.times do |i| cols.times do |j| c = start + i * cols + j
puts <<EOD char id=#{c} x=#{j * fontw} y=#{i * fonth} width=#{fontw} height=#{fonth} xoffset=0 yoffset=0 xadvance=#{fontw} page=0 chnl=0 // #{c.chr} EOD end end
|
生成された.fntファイル:
info face="" size=0 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=1,1 common lineHeight=8 base=0 scaleW=10 scaleH=100 pages=1 packed=0 page id=0 file="font.png"
chars count=96 char id=32 x=0 y=0 width=8 height=8 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 // char id=33 x=8 y=0 width=8 height=8 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 // ! char id=34 x=16 y=0 width=8 height=8 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=0 // " ...
|
これと画像ファイルをResourcesに追加してやって
CCLabelBMFont* label = CCLabelBMFont::create("Hello, world!", "font.fnt");
|
などとすればよい。
CCLabelBMFont
はCCSpriteBatchNode
を使って文字を表示しているのでパフォーマンスもなかなかよいだろう。