1: 2015-05-26 (火) 14:15:13 njf[5] [6] [7] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ビットマップフォントを使う利点は | ||
+ | -好きなデザインのフォントを使える | ||
+ | -テクスチャを統合すればドローコールを減らせる | ||
+ | などがある。 | ||
+ | |||
+ | 難点は | ||
+ | -文字種が多いと現実的では無い | ||
+ | -作って管理するのはそれなりに手間 | ||
+ | |||
+ | がある。 | ||
+ | |||
+ | ゲームではゲーム画面で使う数値とアルファベットと半角記号ぐらいを作っておくと便利。 | ||
+ | |||
+ | ビットマップフォントの作成は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で取り出している。 | ||
+ | |||
+ | ゲームにもよるが、ゲーム画面ではスコアや残り時間表示などテキストを使う事が多いので、これでかなりドローコールが減らせる。 |
(This host) = https://njf.jp