吐き気がしてきました。
apeirophobia: AS3での埋め込みフォントの共有について:其の参[ランタイム共有ライブラリ編](未解決)の続きです。
前回かなり絶望的な結果で凹んでいたのですが、検証続行。
今度は基本に立ち戻り、ストレートに子swfでフォントシンボルをRSL化して、親swfと共有してみます。
1)子swfでフォントをシンボル化して、すべてのプロパティを有効に
2)これを親コピペして共有読み込みに。
3)共有化しているフォント名でそのままTextFormat指定。
問題となる親swf上での同一フォントの静止テキストはRSLのリンケージ名を使用して設定すればOK。
これまでのやり方に比べて超簡単。
ただし何故にこれをやらなかったかというと、フォントシンボルは実体が無いため、ドキュメントクラスのコンストラクタ発動前に強制的に読み込みが始まってしまう点。※1
※1
これはそのフォントを使用した静的テキストを含むオブジェクトがリンケージ設定で「最初に書き出し」になっている場合です。逆にどこにも使用されていない場合には明示的にそのフォントを使用した静的テキストを配置する必要があります。(そうしないとembed出来ない)
そしてそれがタイムライン上で認識された瞬間にFlashはRSLを含む子swfの参照、読み込みを開始します。既に認識されている(キャッシュに貯まっている?)場合は読み込みリクエストを出さない仕様になっていると思われます。(そのキーがリンケージURL?)
つまり和フォントとか埋め込んでいたら、3MBとかの外部swfの読み込みが完了しないとLoading表示できない・・・という部分。※2これはユーザに謎の空白の時間を与えてしまうことになりあまりよろしくない。ということでもう少し考えてみる。
少し使えるかもしれないサンプルはこちら。
www.img8.com/src/test_font6.zip
あと少しかなあ・・・。
※2
コンストラクタ前のLoadingを回避する方法としてはそのフォントを含むリンケージシンボルをタイムラインで後ろに配置してそこで実体化させる方法ですが、近年のOOPS化によるリンケージシンボルの増加を踏まえると作業効率的に現実的では無い。業界的にシフトしているPreloader化に従うべきかと。
カテゴリー