ビットマップフォントで遊ぶ:未定義文字をトウフで埋める


前回の記事フォントに絵文字を入れ込むの続きです。
<続きクエー

複数の文字として1つの画像をまとめてフォントに登録する

自分の作ったUtilクラスに、サブタイトルのような機能を持たせませした。先に結果とコードを載せます。


英数字フォントで未定義である平仮名・カタカナコード部分に、俗に言う"とうふ画像"を登録して埋めています。

sample.as
// トウフビットマップ文字の作成
var tofuChar:BitmapChar =
    BitmapFontUtil.createBitmapCharByTexture(
        0 , // charcodeはなんでもいい
        _assetManager.getTexture("tofu"), 0, 4, 12); 

// tofuCharを範囲指定で登録
BitmapFontUtil.fillBitmapChars(
    tofuChar,
    eijiFont, // 対象フォント
    CharCodeUtil.getIdListByCodeRange(0x3000, 0x30ff), //ひらがなとカタカナの範囲
    true, // 上書きしない設定
    true  // BitmapCharを使いまわす設定
);

// 画面に表示(_doHelperはデモ用に画面表示を楽に行うためのインスタンス)
_doHelper.locateDobj(
    _doHelper.createSpriteText(
        "ABCあいうえあ〜ワヲンDEF", eijiFont.name, 200),
    50, 40);

BitmapFontUtil.fillBitmapCharsという部分がキモの命令です。フルコードはこちらに(前回の記事のデモも含む。)
https://github.com/harayoki/-qiita1/blob/replaceBitmapCharByTexture/src/StarlingMain.as

トウフ画像とパック済みフォント画像は1つのアトラス画像にパックされています。(前回の記事参照)カナフォント画像やカラーバー画像もアトラス画像に含まれていますが、今回のデモでは使われていません。

注意

fillBitmapCharsの第五引数、"BitmapCharを使いまわす設定"というのだけ、注意が必要です。BitmapCharインスタンスをフォントに登録する際、本来は1文字1文字別のBitmapCharインスタンスを使わなくてはいけない(BitmapCharは登録されるidのプロパティをもっている)のですが、今回のような目的では無駄にメモリを浪費してしまうので、デフォルトでは1つのインスタンスでまかなう処理になっています。今の所誤動作はしていませんが、利用される方がおり、何か問題が出た場合はここをfalse指定にしてください。

まとめ

今回の記事のやりかたで、Starlingのテキストフィールドが、未定義文字があってもエラーtraceを書き出すだけでそのまま文字を表示しないでスルーしてしまうのを、目視でトウフ確認できる状態に変更できるので、そのような際に役に立つかもしれません。。まあ、そもそもTextField側のコードを直したい感じではありますね。

<まだ続くクエー