[AS]AS3/CS3にて、”フォントの埋め込み”をスクリプトで埋め込んであるはずなのに表示されない
かなりはまりました。
が、現象の再現性が完全につかめてないので、なんとなく状況をメモ。
(いまのところ発生原因がわからない)
通常スクリプトでテキストフィールド作って、フォントを埋め込む際は、まずはこんなコード。
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.text.TextField import flash.text.TextFormat; public class aaaa extends Sprite { public function aaaa() { var textformat:TextFormat = new TextFormat(); textformat.font="Verdana"; textformat.size="100"; var tf:TextField = new TextField(); tf,mouseEnabled = false; tf.defaultTextFormat=textformat; tf.autoSize= "left"; tf.htmlText="BACK"; tf.embedFonts=true; addChild(tf); tf.alpha = 1; } } }
ただこれだけではフォントは表示されない。
flaファイルのライブラリにフォントを追加して、それにリンケージ設定が必要。
(ライブラリの右上のメニューボタンから新しいフォント…(上記例ではVerdana)を追加する。)
その際の、クラス名はなんでもよし。
通常これでVerdanaフォントの”BACK”という文字が表示されます。
が、しかし、この手順でもフォントが表示されない場合がありました。
(テキストがまったく表示されない、埋め込みやめると表示される)
原因がつかめず、かなーり悩んみました。。。
どうも、ステージ上にフォント埋め込んだテキストフィールドが置かれている場合に挙動がおかしくなる模様。
たとえば~
ステージには別途テキストフィールドを配置して、
それにはVerdanaを”小文字”だけ埋め込み。(ボールド、イタリックは未チェック)
そして上記のスクリプトでVerdana設定したテキストを読み込み、
ライブラリのフォントをリンケージ設定して、プロパティでイタリックを設定してプレビューすると・・・
スクリプトで追加してるはずの”BACK”が表示されません。
※ここで表示されるときもあったりしました。(ただしイタリックにはなってない)
次にステージのテキストフィールドの埋め込み文字設定を大文字を選択すると。。。
BACKが表示されましたが、イタリックにはなっておらず。。。
さらにステージのテキストフィールドのプロパティのイタリックボタンをチェックすると。。。
やっとイタリックの”BACK”が表示されました。
一見関係性のなさそうに見える、ステージ上で設定した埋め込み設定と、ライブラリ内に追加したフォントの設定が干渉してるみたい。
自分で1から作ったものなら、ステージに何おいてるかって把握してるのだけど、
人が作ったものを追加修正のときとかで、
ステージにたくさん物が置いてあって、
さらにどれが生きてるのかも完全把握できない。。。
なんて状態だと、とても危険です。
どこかにフォントの埋め込まれたテキストフィールドが潜んでいると・・・
上記のような現象が起きても不思議ではありません。。。
まぁわたしは実際体験したのですが。。。
ちなみにそのときの解決策としては、ステージ外に空のテキストフィールドを置いて、そこにスクリプトで埋め込もうとしてるフォントを埋め込みました。(文字の種類は、スクリプトで設定しようとしてる文字の設定に)
そしたら表示されるようになりました。
同じような現象に悩まれてる方の救いになれば幸いです。
Tweet
2 Comments
通りすがりですがお役にたてればと…
>クラス名はなんでもよし。
これを適当なクラス名(例:Verdana)で宣言しておき、
処理の最初にインスタンス化しておけば、常に正しく表示されると思います。
var format:TextFormat = new TextFormat();
var mf:Verdana= new Verdana();
textformat.font = mf.fontName;
自分もはまったので記させていただきました。