[FlashDevelop]フォントの埋め込み

最近FlashDevelopでFlashコンテンツを作ったりしています。

以前のあほげーに参加したゲームもそうですが、Flashは使ったことがないので、Flexだけで何とかできる方法を模索しています。

 

フォント関係でだいぶ試行錯誤したのでそのメモです。

環境 [FlashDevelop3.3.4 + Adobe版 Flex SDK 4.1.0.16076]

記述はActionScript3.0です。

 

ActioinScriptではフォントを埋め込まないと、アンチエイリアスとかきれいな表示にならないとか困ったことがいろいろあります。

なので使うフォントは基本的には埋め込んで使いたい。

がFlashDevelopではどうしたらいいのか

 

一つはEmbedで直接埋め込む方法

ためしにHGP創英プレゼンスEBを埋め込んだ。

[Embed(fontName='fontSouei',source='c:\\windows\\fonts\\HGRPRE.TTC', fontFamily='HGP創英プレゼンスEB', mimeType='application/x-font', embedAsCFF='false')]
private var embedFont1:Class;

fontNameに指定したフォントを使える(embedFontsをtrueにすること)

var tf:TextField = new TextField(); 
tf.autoSize = TextFieldAutoSize.LEFT; 
tf.antiAliasType = AntiAliasType.ADVANCED;
tf.embedFonts = true;
tf.defaultTextFormat = new TextFormat("fontSouei",12,0x696969,true,false,null,null,null,"center",null,null,null,10); 
tf.text = "にゃぐ";

 

システムフォントだとこんな感じ

[Embed(fontName='fontMincho',systemFont='MS 明朝', fontFamily='myMincho', mimeType='application/x-font', embedAsCFF='false', fontStyle='italic')]
private var embedFont4:Class;

でもこれをやるとコンパイルが非常に遅くなる。毎回全文字を変換しているのだと思われる。

できるswfもすごく大きくなってしまいます。

 

もう一つの方法は、フォントを埋め込んだswfファイルを使う方法

「フォントを埋め込んだswfファイル」といっても、Flashがあるなら簡単に作れるようですがどうすれば?

ググリまくってswfmillを使う方法で成功しました。

 

まずXMLを作成します。glyphsに使う文字だけを指定することによって、全文字ではなく必要な文字のみのフォントだけ入った軽量のものになります。

 

<?xml version="1.0" encoding="UTF-8" ?>

<movie width="1" height="1" framerate="12">
    <frame>
        <library>
            <font name="souei_" import="c:\\windows\\fonts\\HGRPRE.TTC" glyphs="にゃぐ"/>
        </library>
    </frame>
</movie>

以下のようにコマンドを実行するとswfができます。

swfmill -v simple fontSouei.xml font1.swf

できたswfを持ってきて見るとこんな感じ

 

使い方はこのように

 

[Embed(source='font1.swf', fontFamily='souei')]
private var embedFont1:Class;

 

一応できましたが問題もあります。

swfmillのバグなのか分かりませんが、XMLのfontタグのnameに”souei_”としてありますが、これは”souei”とすると1文字削られて”soue”にされてしまいます。

イタリックやボールドのものを作る方法も分かりませんでした。

WARNING: c:\\windows\\fonts\\HGRME.TTC contains 3 faces, but only the first is imported.

とでていることから、ボールドとかが別々のフォントになってない限り最初のフェースだけしかできないということなのだろうと思います。

“simple”を指定する限り他のタイプフェースを選ぶことはできないのでしょうか?swfmillを突き詰めてはいないのでなんともいえませんが。

カテゴリー: Flash, ソフトウェア タグ: ,

関連してるかも記事

この記事へのコメント

※コメントはスパム対策の為、承認制となっています。あらかじめご了承ください。

トラックバックURL