こんにちは、なかわけです。
loadMovie()とsetMask()を同時に使う方法については、改めて
外部からswfを読み込んで同時にsetMask()でマスクする方法にまとめてあります!そちらを参考にしてください。
今日も仕事中に発見したことを忘れないうちに覚書。今日の発見はすごいです。
というか今までこの問題に遭遇しなかったのか不思議です。もしくは遭遇していて違う対処法をしていたのでしょうか。
いずれにせよ、今日の発見はなんとなくすごい。
FlashでloadMovie()関数を使うと、外部のswfやjpg画像などを読み込めます。
▼こんな感じ
myClip.loadMovie("画像のパス");
そうするとムービークリップ「myClip」に画像なりswfなりが読み込まれます。
でこのあとにmyClipにマスクをかけます。
▼こんな感じ
myClip.loadMovie("画像のパス"); myClip.setMask(maskClip名);
するとあら不思議。マスクかかりません!
これはいったい・・・・?
ちゃんとした答えはわかりませんが、いろいろ調べてみてなかわけ的には以下のように解釈しました。
[ なかわけの解釈 ]
loadMovie()は関数でsetMask()はメソッド。
loadMovie()関数を実行したあとでは、setMask()メソッドは有効にならない(設定が変更できない)。
はい。現象を確認しただけではなんの解決にもならないので、見つけた解決方法を以下に書いておきます。
[ 解決方法 ]
myClip.loadMovie("画像のパス", setMask(maskClip名);
Flashのヘルプを見ると、loadMovie()のパラメータには画像のパスと、ターゲットと、メソッドというのがあります。通常メソッドにはGETかPOSTが入るようですが、setMask()も同じメソッド扱いとなり受け付けてくれるようです。
なんとなく腑に落ちない感じはしますが、これでいけるようです。あー今日も勉強になった。
loadMovie関数についてのFlashリファレンスには以下の一文があります。
「ターゲットにロードした SWF ファイルまたはイメージは、ターゲットムービークリップの位置、回転、および拡大・縮小プロパティを継承します。」
ロードされるターゲットの位置、回転、および拡大・縮小プロパティ以外は継承しない。と読み替えると分かりやすいかも。
つまり、ロードが完了する前にsetMaskしてしまうと、ロードが完了したときに初期化されてしまうのがマスクがかからなくなってしまう原因かと。
【回避策】
・loadMovieではなくMovieClipLoaderを使う。
・onLoadInit時にsetMaskする。
【注意点】
・MovieClipLoaderを使っても「ターゲットにロードした SWF ファイルまたはイメージは、ターゲットムービークリップの位置、回転、および拡大・縮小プロパティを継承します。」というのは同じなので、ロード完了時にsetMaskするのが正解かと思います。
dsko0さんコメント&アドバイスありがとうございます。
なかわけは最近知ったのですが、画像やswfを読み込むときには、MovieClipLoaderを使ったほうがいいみたいですね。
勉強しときます・・・。
外部からswfを読み込んで同時にsetMask()でマスクする方法
こんにちは、なかわけです。 だいぶ前の話になりますが、ちょっと時間があったので(…
[Flash ActionScript]loadMovieしたMCにsetMaskする!
MCにloadMovieすると、なぜか、setMaskでマスクがかからない! 簡単な解決策:loadMovieするMCに、 onClipEvent(lo…