[AS3] Text Layout Framework(TLF)で悩みがちなこと [Edit]

TLFテキストやText Layout Frameworkのコンポーネントライブラリを使うと、不思議な結果に出逢うことがあります。しかも、Flash Playerのバージョンによって、動きが変わったりします。その中のからいくつか解明できたことをご紹介します。

TLF(Text Layout Framework)については、筆者のサイトFumioNonaka.comにいくつかテクニカルノートを書いてきました。ところが、Flash Player 10.2/Flash Professional CS5.5で、コンポーネントライブラリの仕様が変わりました。そこで、重要なものは再検証したうえで、情報の追加やスクリプトの修正をしました。それらの記事をまとめてみます。


01 TLFテキストのある外部SWFを読込むとその中のオブジェクトにアクセスできない

おそらく、もっとも引っかかりやすいのは、TLFテキストが含まれた外部SWFを読込んだ場合です。お決まりどおりLoaderInfo.completeイベント(定数Event.COMPLETE)で外部SWFの読込みを終えたうえで、Loader.contentプロパティから読込んだムービーの参照を得て操作しようとすると、プロパティが見つからず、デフォルト値もないという、意味の分からないエラーが示されたりします。

図001■プロパティが見つからずデフォルト値もないというエラー
図001

Text Layout Frameworkのコンポーネントライブラリは、デフォルトではFlash Playerに動的に読込まれます。そのため、メインタイムラインは一旦ステージから切離され、ロードが済んでから定位置に戻るのです。TLFが含まれた外部SWFのメインタイムラインにアクセスするやり方を3つご紹介します。→「TLFテキストのある外部SWFを読込むとその中のオブジェクトにアクセスできない


02 SafeLoaderクラスを使う

Adobeのサイトに「Loading child SWFs with TLF content generates reference errors」(TLFコンテンツのある子のSWFをロードすると参照エラーが起こる)というトラブルシューティングの記事が掲載されました。エラーを生じる具体的な状況は説明されていないものの、前項01の問題が想定されているようです。その対処法のひとつとして、AdobeからSafeLoaderというクラスが無償で公開されました(図002)。

図002■AdobeサイトからダウンロードしたSafeLoaderクラス
図002

SafeLoaderクラスを使えば、外部SWFにTLFコンテンツが含まれていても、ロードしたムービーのメインタイムラインにアクセスできます。このSafeLoaderクラスのインストール方法と使い方を簡単にご説明します。→「SafeLoaderクラスを使う


03 TLFテキストが配置されたメインタイムラインの初期化

Text Layout Frameworkのコンポーネントライブラリは、デフォルトではランタイム共有ライブラリとして読込まれます。すると、メインタイムラインは初めはStageオブジェクトの表示リストから外され、ライブラリがロードされた後本来の場所に置かれます。ただ細かく調べると、メインタイムラインが定位置に戻るまでの過程は、Flash Player 10または10.1(Flash Professional CS5)と10.2(CS5.5)では違っています。

結果として、イベントの起こり方もバージョンによって変わりますので、注意しなければなりません。デフォルトのランタイム共有ライブラリの設定は変えることもできます。→「TLFテキストが配置されたメインタイムラインの初期化


04 flashx.textLayoutパッケージのクラスを使うとコンストラクタからStageにアクセスできない

ドキュメントクラスでも、Text Layout Frameworkを使うと、やはり一旦Stageオブジェクトの表示リストから外されます。そのため、コンストラクタメソッドからは、DisplayObject.stageプロパティでStageオブジェクトにアクセスできません。→「flashx.textLayoutパッケージのクラスを使うとコンストラクタからStageにアクセスできない


05 TLFTextFieldのテキストの一部を指定したTextFormatが設定できない

TLFTextField.setTextFormat()メソッドは、第2および第3引数のインデックスでテキストの一部を定めて、TLFTextFieldインスタンスにTextFormatオブジェクトの書式が設定できます。しかし、Flash Professional CS5.5では、すべてのテキストに書式が適用されてしまうようです。→「 TLFTextFieldのテキストの一部を指定したTextFormatが設定できない


06 Text Layout Framework(TLF)でハマらないために

Text Layout Frameworkに関わる問題について議論されたフォーラムやblog記事を以前ご紹介しました。一部上記の項目と重複しますが、改めてご案内しておきます。→「Text Layout Framework(TLF)でハマらないために


[追記2012/03/13]「TLFTextFieldのテキストの一部を指定したTextFormatが設定できない」を本文05に加えました。

コメント

この記事へのコメント

  1. 1.野中 文雄(2012年03月13日 18:21)

    「TLFTextFieldのテキストの一部を指定したTextFormatが設定できない」を本文05に加えました。

    また、関連する記事として「テキストが入ったAIファイルを読込むと − パンドラの箱」があります。
    http://f-site.org/articles/2012/01/19232707.html

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事