結構一般的なことかもしれないけど、ちょっとはまったのでメモ。
Macromedia製品のフォント名のルールはわかりにくく、リストに”bold”が表示されない場合は”roman”にパネルで”BOLD”を有効にしたりするという、フォントそのものが変更されているのか、Flash上でBold化しているのか良くわかりません。
よく使われるところでは”Helvetica Neue”のBold等がそれに相当するかと思います。Helvetica Neueの場合は基本的にweight volumeに+20したものに相当するので、55 RomanをBOLD化すると75 BOLD、65 MediumをBOLD化すると85 Heavyという関係になっていると思います。(ちなみに95 BlackをBOLD化しても変化はない)
今回は”Midium”と”Regular”のフェイスがかなり異なっている”Akzdenz Grotesk”で話を進めます、このフォントもFlash上では”Regular”をパネルで”BOLD”化して”Midium”に切り替えます。
ちなみにPhotoshopでは”Regular”をパネル上で”BOLD”化しても”Regular”のフェイスで太くなるだけです。正直どちらが正しいのか?と言われると微妙ですが、パネルはあくまでフェイスを補完する感じで考えるとPhotoshopの考え方の方がわかりやすい。Flashはフェイスが変わったり、補完BOLDだったりが入り混じっているので混乱する。この辺はAdobeへの統合に伴い統一の考え方になるかとは思いますが、それはそれで過去のリソースがめんどくさいことになりそうで不安です。
以上の話を踏まえて”Akzdenz Grotesk Midium”をembedFontとして使用する場合についてメモしておきます。
通常fontのembedの簡単なやり方はフォントシンボルを作成、リンケージ、textFormatで指定。ただフォントシンボルはキャラクター数の設定ができなくてSWF容量が増加、また読み込みが1フレに集中してしまうのであまり使用しません。(ライブラリSWF化して使うことはありますが、この場合もフォント名などで色々ややこしい問題がある)
一般的に使われているのはダイナミックテキストフィールドを用いて、必要なキャラクターだけの埋め込みという方法になります。(UnicodeTable.xmlでカスタム文字セットを作る方法もあります)”Akzdenz Grotesk Midium”を埋め込む場合はテキストフィールドのフォントを”Akzdenz Grotesk Regular”に設定し、パネルで”BOLD”化して埋め込み設定を行います。これで”Akzdenz Grotesk Midium”はembedされたことになります。
で、このフォントを用いてhtmlTextを表示させる場合にはまりました。
通常のtext指定の場合は
my_textField.embedFonts = true;
my_textField.text = “1234_abcd”;
txf = new TextFormat();
txf.font = ‘Akzidenz Grotesk BE’;
txf.size = 50;
txf.bold = true;
my_textField.setTextFormat(txf);
ってな感じで問題なし。で、htmlTextの場合
my_textField.html = true;
my_textField.embedFonts = true;
my_textField.htmlText = “1234_abcd”;
txf = new TextFormat();
txf.font = ‘Akzidenz Grotesk BE’;
txf.size = 50;
txf.bold = true;
my_textField.setTextFormat(txf);
これもOK。
で、問題はテキストフィールドのプロパティをパネルでフォント=’Akzidenz Grotesk BE’、そしてBOLDボタンを有効に設定して、TextFormatを使用しない場合。ソースはこんな感じ。
my_textField.html = true;
my_textField.embedFonts = true;
my_textField.htmlText = “1234_abcd”;
これだと表示されません。この場合はhtmlTextで埋め込む文字列にhtmlタグでを指定してやる必要があります。
my_textField.html = true;
my_textField.embedFonts = true;
my_textField.htmlText = “1234_abcd”;
こんな感じ。
まぁ普通にきちんとTextFormatを指定してやればいいんだけど、デザイン組み込みながら作っているとスクリプトで記述せず、フィールドに直接設定してしまうこともあるのですが、そんなときにはまってしまう罠。フィールドに直接指定した”BOLD”はキャンセルされてしまうようです。
ちなみにhtmlタグとtextFormatでダブルで”BOLD”指定した場合
my_textField.html = true;
my_textField.embedFonts = true;
my_textField.htmlText = “1234_abcd”;
txf = new TextFormat();
txf.font = ‘Akzidenz Grotesk BE’;
txf.size = 50;
txf.bold = true;
my_textField.setTextFormat(txf);
2倍に太くなるみたいなことはないみたいです・・・。