Adobe Flash非公式テクニカルノート SafeLoaderクラスを使う
「TLFテキストのある外部SWFを読込むとその中のオブジェクトにアクセスできない」場合があります。この問題に対処するため、AdobeはSafeLoaderクラスを公開しました。本稿では、このクラスの使い方を簡単にご紹介します。 01 TLFテキストはデフォルトではランタイム共有ライブラリとして読込まれる また、表示リストにおけるタイムラインの動きは、Flash Professional CS5とCS5.5では異なることに注意が必要です。詳しくは、「TLFテキストが配置されたメインタイムラインの初期化」をお読みください。けれど、いずれにしてもTLFテキストの初期化が済みさえすれば、普通のSWFと同じようにタイムラインにアクセスできます。その機能を提供するのが、SafeLoaderクラスです。 02 SafeLoaderクラスのインストール 図001■Adobeの英文ドキュメントのリンクからZIPファィルをダウンロードする 解凍したSafeLoaderフォルダには、FLAファイルと「fl」というフォルダが入っています(図002)。FLAファイルはサンプルで、SafeLoaderクラスを使うのに必要なASファイルはflフォルダに含まれています。このflフォルダをソースパス(クラスパス)に置いてください。 図002■解凍したSafeLoaderフォルダの中身 ActionScript 3.0のソースパスについては、「ActionScriptパブリッシュ設定」の「ActionScriptファイルの場所の設定」の項をお読みください。ソースパスについてまだ学習されていない場合には、flフォルダはSafeLoaderクラスを使うFLAファイルと同じ場所にコピーすればよいでしょう(図003)[*2]。 図003■flフォルダはSafeLoderクラスを使うFLAファイルと同じ場所にコピーしてもよい
03 クラスSafeLoaderとSafeLoaderInfoの使い方 本稿の初めに引用した「TLFテキストのある外部SWFを読込むとその中のオブジェクトにアクセスできない」で、外部SWFのメインタイムラインにアクセスできないためにエラーが出るとした例をお題にしましょう。外部SWFのメインタイムラインにはTLFテキストがひとつ置いてあり、my_txtとインスタンス名をつけてあります。そして、読込むローダー側のメインタイムラインには、つぎのフレームアクションを書きます。なお、外部SWFのファイル名はsub.swfとしました。
LoaderInfo.completeイベント(定数Event.COMPLETE)で外部SWF(sub.swf)のロードが終わるのを待ち、そのメインタイムラインをLoader.contentプロパティにより参照しようとしています。ところが、前述01「TLFテキストはデフォルトではランタイム共有ライブラリとして読込まれる」にご説明したとおり、TLFテキストの初期化が済むまでメインタイムラインにはプロパティからアクセスできないので、つぎのようにランタイムエラー#1069が示されます。 ReferenceError: Error #1069: sub_fla.MainTimeline__Preloader__ にプロパティ my_txt が見つからず、デフォルト値もありません。 メインタイムラインが参照できなければ、当然そこにあるTLFテキストにもアクセスできないということです。このサンプルとエラーの中身について詳しくは、前出「TLFテキストのある外部SWFを読込むとその中のオブジェクトにアクセスできない」をご参照ください。 さて、このフレームアクションのLoaderとLoaderInfoクラスを、それぞれSafeLoaderとSafeLoaderInfoクラスに置換えたのが、つぎのスクリプト001です。書替えたステートメントは、コメントとして残しました。 スクリプト001■SafeLoaderクラスで外部SWFを読込んでコンテンツにアクセスする
まず、fl.displayパッケージのふたつのクラスは、import宣言しなければなりません(スクリプト001第1行目)。あとは、データ型の指定とコンストラクタメソッドのLoaderとLoaderInfoクラスを、それぞれSafeLoaderとSafeLoaderInfoクラスに書替えるだけです(第2〜3行目)。SafeLoaderクラスのプロパティ(content)やメソッド(load())、それにSafeLoaderInfoクラスのイベント(complete)などがLoaderやLoaderInfoクラスと合わせてありますので、ほかには手を加えずに済みます。 [ムービープレビュー]を確かめると、SafeLoaderInfo.completeイベントでSafeLoader.contentプロパティにより、外部SWFのメインタイムラインが正しく参照できます。そして、メインタイムラインに置いたTLFテキストインスタンス(my_txt)のTLFTextField.textプロパティに、文字列("success")が設定されます(図005)。 図005■外部SWFのメインタイムラインに置いたTLFテキストに文字列が設定された SafeLoaderクラスは、TLFテキスト初期化のプロセスが異なるFlash Professional CS5とCS5.5のどちらでも同じように使えます。また、ロードする外部SWFがTLFテキストを含まない場合でも動きは変わりません。 作成者: 野中文雄 Copyright © 2001-2012 Fumio Nonaka. All rights reserved. |
||||||||