前回、FlashにXMLデータを読み込みました。
今回は、そのXMLから取り出した画像のURLから画像データを読み込み表示します。
おさらい
前回作成したフレームアクションは、次の通りです。
実行すると、図のようにXMLからsrc属性のデータが出力されました
今回は、そのデータを利用して画像を表示したいと思います。
格納すべきデータは、画像のURLが中心ですが、いっしょに保存されているtitleやid属性もまとめて保存しましょう。
Objectデータを配列にする
1件分のデータはObjectにしておきます。これだと、Object.idやObect.titleなどで属性が取得できて便利だからです。そして、そのObjectを配列の要素として保存します。
データの構造は次のようなイメージです。
では、まずfunction onLoaded()の中を太線のように書き換えます。
このままでは、t_objectは、単に属性がセットされるだけで、関数onLoaded()が終了すると残りません。
そこで、複数のt_objectデータを並び順通りに保存するために配列(Array)を使用します。
配列 image_arrayをfunction onLoaded()の外で定義し関数内で配列に挿入すると、次のようになります。
これで、関数onLoaded()が終了した後でも画像パスなどのデータをimage_arrayで調べることができます。
画像を読み込んで表示する関数を作る
画像を読み込むためには、Loaderクラスを使用して、次のような感じで使用します。
今回もURLの指定には、StringではなくURLRequestを使用します。
そこで、Loaderクラスを使用して「指定した画像を読み込んで表示する」という関数を作ります。
また画像の指定方法は、image_arrayの順番を指定する引数numを使用して該当するObjectのsrc属性を調べます。
showPicture関数の定義は、次のようになります。
これで、読み込みは成功しますが、画像を表示するにはMovieClipの時と同じようにloaderオブジェクトをaddChild()する必要があります。
これらをまとめたものが次のスクリプトです。
ムービープレビューで最初の画像を表示するには、どこかでこの関数を実行しないといけないため、XML解析を行うonLoaded()の最後で、showPicture(0)と呼ぶようにします。
次の画像を指定する関数
フォトアルバムのように、次から次へと表示したいので、showPicture()の引数を増加させる「次の画像を指定する関数」も作成しましょう。
関数名は、nextPictureとします。
現在のimage_arrayの番号も、変数にいれて格納しておかなくてはいけません。新たな変数をcurrent_image_numとして作成し,サンプルスクリプトのように定義は関数の外に書きます。
上記のスクリプトを解説すると、まず、current_image_numを1増加させます。
その値が、「image_arrayの長さ-1」(image_array.length-1)以上であるときは(※)、current_image_numは、再び先頭の0に戻します。
最後に、current_image_numをshowPictureの引数にして実行します。
nextPicture()を実行するイベント
現在の関数nextPicture()は、まだどこからも呼ばれるきっかけがないため、何かのイベントにひもづけて自動、あるいはインタラクティブにする必要があります。
そこで、画像(loader)をクリックしたら反応するようにしましょう。
この1行をloaderを作成するshowPicture()の中に書きます。ただし、まだ、正しく動作しません。
MouseEventでnextPictureが呼ばれるため、nextPictureは、引数としてMouseEventオブジェクトを受けとる必要があります。
そこで、関数nextPictureの1行目を次のように修正します。
これで、クリックすると写真が切り替わる次のようなFlashができます。
まとめ
これで、MTからXMLデータを出力→XMLを読み込んで画像を表示する、ところまでできました。
最後に現在までのスクリプトをコメント付きで書いておきます。太字が今回作成したスクリプトです。また、今回のサンプル(showPicture.zip)をダウンロードできます。
次回以降は、FlashからMTへのフィードバック、その他のデータ表示、サムネイル表示、個別の画像を指定して表示する個別ページの作成を紹介していきます。