- ベストアンサー
attachMovieで作成したインスタンスへloadした画像のサイズ変更について
- FLASH Pro8を使用しており、attachMovieで作成したインスタンスへloadした画像のサイズを変更する方法について教えてください。
- スクリプトを使用して画像を読み込むことはできますが、サイズが指定したものにならず、画像が拡大されてしまいます。
- この問題を解決する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> サイズが指定している100*100になりません。 画像ロード後にサイズを 100*100 にしないからです。 書かれていらっしゃるスクリプトは次のようになっています。 this.attachMovie("img",newName,ID); //インスタンスを作成 ↓実行↓ this[newName].loadMovie(ID+".jpg"); //作成したインスタンスに画像を読み込む ↓実行↓ this[newName]._width = 100; //画像を読み込んだインスタンスの幅を変更 これを見る限り,ロード後に 幅を 100 にしているように見えます。 しかし実際はロードに時間がかかるため, this.attachMovie("img",newName,ID); //インスタンスを作成 ↓実行↓ this[newName].loadMovie(ID+".jpg"); //作成したインスタンスに画像を読み込む ↓実行(ロードが開始されるだけ)↓ this[newName]._width = 100; //画像を読み込んだインスタンスの幅を変更 ↓その後↓ this[newName] に ID+".jpg" がロードされる となります。 画像がロードされる前に 100*100 に変更すると, 元の 「作成したインスタンス」 の大きさが 100*100 になります。 元の 「作成したインスタンス」 の大きさが 仮に 50*50 であれば, 元の 「作成したインスタンス」 の縦横が2倍の大きさになるということです。 縦横2倍に拡大されたムービークリップに, 外部画像をロードすると外部画像も縦横2倍になってします。 そういうような現象が起きているのです。 Flash 8 をお使いだということですから, ロード待ち処理をさせるには MovieClipLoader クラスのメソッドやイベントリスナーを使う方法をとるのが良いと思います。 スクリプトは次のようになります。 ------------------------------------------ MCL = new MovieClipLoader(); // MovieClipLoaderクラスのインスタンスを作成 MCL.addListener(this); // this(_root) をロード監視オブジェクトとして登録 function onLoadInit(targetMC) { // ロード完了時の動作を定義 targetMC._width = 100; //画像を読み込んだインスタンスの幅を変更 targetMC._height = 100; //画像を読み込んだインスタンスの高さを変更 } for (ID=1; ID<=10; ID++) { //画像を10枚読み込みたいので、for文で回します。 newName = "img"+ID; //作成するインスタンスの名前を設定 this.attachMovie("img", newName, ID); //インスタンスを作成 this[newName]._x = 100*ID; //インスタンスの配置場所(Xのみ)を設定 MCL.loadClip(ID+".jpg", newName); //作成したインスタンスをターゲットとしてMCLに画像を読み込む } ------------------------------------------ MovieClipLoader クラス のスクリプトは, Flash 8 の 1つ前のバージョン Flash MX 2004(FlashPlayer7)から使用できます。
お礼
出来ました!ありがとうございます! 分かり易く丁寧なご説明に加え、スクリプトまで書いて頂き、大変に勉強になりました。