ビットマップフォントを使う利点は

  • 好きなデザインのフォントを使える
  • テクスチャを統合すればドローコールを減らせる

などがある。

難点は

  • 文字種が多いとファイルサイズが大きくなりすぎて運用が現実的では無い
  • 作って管理するのはそれなりに手間

がある。

ゲームではゲーム画面で使う数値とアルファベットと半角記号ぐらいを作っておくと便利。

ビットマップフォントの作成はShoeBox編集が便利。他にもいろいろとある。

Starlingでの使い方は http://wiki.starling-framework.org/manual/displaying_text こちらに紹介されているように、

[Embed(source="font.fnt", mimeType="application/octet-stream")]
public static const FontXml:Class;

[Embed(source = "font.png")]
public static const FontTexture:Class;

var texture:Texture = Texture.fromEmbeddedAsset(FontTexture);
var xml:XML = XML(new FontXml());
TextField.registerBitmapFont(new BitmapFont(texture, xml));

のようにテクスチャと定義ファイルで初期化すると、あとは普通にTextField編集でフォント名を指定すると使える。 このとき、指定するフォント名がビットマップフォントの定義xmlファイルにある「face」アトリビュートになることに注意が必要。 ShoeBox編集だとデフォルトでこれがフルパスの画像ファイル名になるため、設定を変更するか編集しておかないと使い勝手が悪い。

しかし、このやり方より「StarlingのAssetManagerを使う」で紹介したAssetManager編集を使う方が、ロードと初期化をしてくれるので便利。

assets.enqueue(RESOURCE_DIR + "font.png");
assets.enqueue(RESOURCE_DIR + "font.fnt");

として、ロードするだけで、ビットマップフォントとしての初期化までしてくれるので、あとはフォント名を指定するだけでTextField編集で使える。AsssetManager編集については「StarlingのAssetManagerを使う」を参照のこと。

しかし、この時はフォント名はxml内の「face」の値では無く、ファイル名(ここでは「font」)になることに注意が必要。

これでも使えるのだが、実際のゲーム開発では負荷を減らすためにドローコールを減らしたいが上のやり方ではビットマップフォントが別のテクスチャになってしまうのでその役には立たない。

それを実現するにはまず、ビットマップフォントを作成したら、そのテクスチャを他のテクスチャと統合し、あとでプログラム的にサブテクスチャを取り出せば良い。

まずxmlファイルの方はembedする。残念ながらAssetManager編集を使うと、テクスチャ無しのビットマップ定義のみではエラーとなってxmlが取り出せない(取り出そうとするとnullが返る)のでembedするか自分でロードする必要がある。

[Embed(source="font.xml", mimeType="application/octet-stream")]
public static const BmpFontXml:Class;

あとは、テクスチャアトラスに含まれるBitmapのテクスチャと共に初期化を行う。

TextField.registerBitmapFont(new BitmapFont(assets.getTexture(BMP_TEXTURE_NAME),XML(new BmpFontXml())));

ここでビットマップフォント以外も含まれているテクスチャアトラスの中から、ビットマップフォント部分をgetTextureで取り出している。

あとは、BitmapFont編集.createSpriteを使うとドローコールが減ると以下のページにあるのだが、やってみるとさほど減らない。謎。

http://forum.starling-framework.org/topic/performance-bitmap-fonts-draw-count

数文字程度の場合、batchableをtrueにしておくとドローコールが減らせる。しかし、文字が多いとドローコールを減らすための処理が減らしたことによる負荷軽減を上回るそうなので、十数文字以下での利用が推奨されている。BitmapFont編集のみの機能で通常のフォントによるTextField編集では意味が無い。

textField.batchable = true;

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 862, today: 3, yesterday: 1
初版日時: 2015-05-26 (火) 22:15:13
最終更新: 2015-05-29 (金) 19:09:16 (JST) (928d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF