• 締切済み

AS2.0でライブラリの画像を読込

外部ファイルの画像がなかった場合ライブラリから該当の画像をかわりに表示させたいです。 検索してみたのですが見つからず、どうやらAS3.0ではできるようなのですが、 同じ事を2.0でもできますか? どのようにやれば良いのでしょうか。

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

ご使用の Flash のバージョンを書かれていらっしゃいませんが, ご質問の内容は,ActionScript のバージョンよりも, Flash のバージョンやパブリッシュする SWF の FlashPlayer のバージョンの方に大きく依存することだと思います。 「ライブラリから該当の画像」 と書かれていらっしゃいますが, この画像がベクタ画像であればムービークリップに変換して, ライブラリよりリンケージのプロパティで識別子を付けて, ロード失敗時にそのムービークリップを attachMovie します。 これは AS1.0 でも,AS2.0 でも使用できます。 また attachMovie 自体は Flash5 からできます。 ただロード失敗をちゃんと把握するには,MovieClipLoaderクラス が必要になると思います。 MovieClipLoaderクラス は FashMX2004 以降で使用できます。 これも AS1.0 でも,AS2.0 でも使用できます。 また,ビットマップ画像であっても, ベクタ同様,ムービークリップにしてしまえば上の方法でできます。 そうではなくて, 「ライブラリから該当の画像」が, JPEG や GIF や PNG などのビットマップ画像であって, なおかつ, それをムービークリップに変換せずにそのまま代替表示させる場合のときは, Flash8以上 で使用できる BitmapDataクラス が必要になると思います。 これも AS1.0 でも,AS2.0 でも使用できますが, 一般的には AS2.0 として使用されることの方が多いと思います。 この BitmapDataクラス を使った, ActionScript2.0 形式のスクリプト例を回答します。 まず, 外部画像として SWF と同じフォルダに 「photo.jpg」 があったとします(もしくはなかったとします)。 またライブラリには 「sub_bd」 という識別子を付けたビットマップシンボル代替画像があるとします。 その場合, フレームに書くスクリプトを次のようにすると,代替表示ができます。 ////////////////////////////////////////////////////////////// // BitmapDataクラスファイルを読み込む import flash.display.BitmapData; //識別子 sub_bmd を読み込んだ BitmapDataクラスのインスタンス BD を作成 var BD:BitmapData = BitmapData.loadBitmap("sub_bd"); // MovieClipLoaderクラスのインスタンス MCL を作成 var MCL:MovieClipLoader = new MovieClipLoader(); // ロード監視用インスタンス LSN を作成 var LSN:Object = new Object(); // ロード失敗時の動作を定義 LSN.onLoadError = function(target:MovieClip) { // ロードを試みたMC の深度0 に BD を適用 target.attachBitmap(BD, 0); }; // MCL のリスナーとして LSN を登録 MCL.addListener(LSN); // 外部画像 photo.jpg を load_mc にロード MCL.loadClip("photo.jpg", load_mc); ////////////////////////////////////////////////////////////// AS2.0 は Flash MX 2004 でも使えますが, お持ちのバージョンがもし FlashMX2004 でしたら, BitmapDataを使わずに, ロード失敗時には普通にムービークリップをattachMovieしてください。 その方がスクリプトも簡単ですし, FlashPlayer7 の SWF まで下げられるメリットもあります(Mac OS9 などでも閲覧可能)。 と言いますか, Flash 8 でも CS3 でも BitmapDataを使わずに, 普通に attachMovie する方が処理なども速いと思います(多分)。

labilion
質問者

お礼

ありがとうございます。 無事解決しました~

関連するQ&A