« プリレンダーフォント新フォーマット案 | メイン | マルチディスプレイ対応に伴う仕様変更 »

2013年06月15日

吉里吉里Z 開発:: プリレンダーフォント

    

プリレンダーフォントは mapPreRenderedFont せずに外字的使い方で手軽に使える方法が欲しい。
サイズ固定なので拡縮して表示するのが難しい。
と言う要望があった。
後、前回のフォーマット案で、Dic/Array Bin は、以下のようにして呼び出す形なら、glyph に適当なクラス入れて missing で配列返せば動的にフォント画像を生成できる? と言う話も。
Font.mapPrerenderdFont ( PrerenderdFont形式辞書 )
それなら glyph クラスの基本形を定義してしまえば、フォント周りは全部それで対応できる。

マップせずに使える方法となると、以下のようなメソッドを準備し、glyph に前回のフォーマット案の glyph の配列を渡す形にすれば、単体で呼び出しやすい。

Layer.drawGlyph(x, y, glyph, color, opa=255, aa=true, shadowlevel=0, shadowcolor=0x000000, shadowwidth=0, shadowofsx=0, shadowofsy=0)

glyph : Array[8]
[
10, // width
10, // height
10, // originx
10, // originy
10, // incx
10, // incy
10, // inc
<% 00 00 ... %> // bitmap
]

拡大縮小は、その配列を生成するメソッドをプラグインなどで実装すれば実現可能になる。
Dic/Array Bin を利用したフォーマットであれば、以下のようにして1文字描画は簡単に行える。

PrerenderdFonts = Scripts.eval("NewPrerenderdFontFile.bin");
function drawChar(x, y, ch, color, opa, aa, shadowlevel, shadowcolor, shadowwidth, shadowofsx, shadowofsy)
drawGlyph( x, y, PrerenderdFonts.glyph[ch],...);
}

複数文字を同時描画するときは一手間必要になるが、KAG のメッセージは1文字ずつ書いているので、それを使って複数文字書けばいいだけではある。
もう一つ、最初全て統一的に扱えると思われた部分が統一的ではなくなってしまうことが残念。
Font.getGlyph( code:int ) : Array メソッドを使い Glyph 配列を生成してから渡せば全て統一的に扱える手段が提供できるが、内部的には2種類の描画方法を持つことになる。
互換性等の都合から、この追加する方法と従来の方法 2種類持つのは仕方ないか。
従来の方法で指定できるプリレンダーフォントファイルは今までのもので、新フォーマット案は組み込みの機能ではなくなるので、あくまで参考仕様と言った形になるかな。

後、この形であるのなら glyph 配列にはカラー情報も追加して、グレースケール65色、256色、フルカラーの指定が出来ると外字として扱いやすいはず。



投稿者 Takenori : 2013年06月15日 03:29




comments powered by Disqus
Total : Today : Yesterday : なかのひと