0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

#複数の文字として1つの画像をまとめてフォントに登録する
自分の作ったUtilクラスに、サブタイトルのような機能を持たせませした。先に結果とコードを載せます。

スクリーンショット 2016-05-07 17.40.01.png 英数字フォントで未定義である平仮名・カタカナコード部分に、俗に言う"とうふ画像"を登録して埋めています。
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側のコードを直したい感じではありますね。

title-logo.png <まだ続くクエー

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?