• 締切済み

as2 setMask()について

as2 setMask()において マスクの対象となるMovieClipイメージに loadMovie()で外部画像が読み込まれている場合、 マスクでは表示されないのでしょうか 初歩的な質問ですがよろしくお願いします

みんなの回答

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

#1 です。 > 上記の条件の場合、 > Maskされる対象(BBB_mc)とMaskするMovieClip(AAA_mc)の間に > 画像を一枚挟むと、BBB_mcは見えなくなってしまいます。 ご質問は setMask を使った方法であって, 決してレイヤーのマスクを使うご質問ではありませんよね。 そうだとするならさっぱり意味がわかりません。 setMask を使う場合, ムービークリップのレイヤーは全く関係ありません。 こう↓しても良いですし,  レイヤー2 |●| ←「AAA_mc」(マスクになるMC)  レイヤー1 |●| ←「BBB_mc」(マスクをかけられるMC) こう↓しても良いですし,  レイヤー2 |●| ←「BBB_mc」(マスクをかけられるMC)  レイヤー1 |●| ←「AAA_mc」(マスクになるMC) こう↓しても良いですし,  レイヤー9 |●| ←「AAA_mc」(マスクになるMC)  レイヤー8 |●| ←違う何か   …    …     …  レイヤー2 |●| ←違う何か  レイヤー1 |●| ←「BBB_mc」(マスクをかけられるMC) こう↓しても良いのです。  レイヤー9 |●| ←「BBB_mc」(マスクをかけられるMC)  レイヤー8 |●| ←違う何か   …    …     …  レイヤー2 |●| ←違う何か  レイヤー1 |●| ←「AAA_mc」(マスクになるMC) 間に何か挟まるとか挟まらないとかが関係しないどころか, 「AAA_mc」 と 「BBB_mc」 自体の上下関係自体も全く関係ありません。 そういうものはどうでも良くて, マスクに関係あるのは 「AAA_mc」 の座標と 「BBB_mc」 の座標です。 > 画像を一枚挟むと、BBB_mc は見えなくなってしまいます。 これは単に, 挟んだ画像(つまり BBB_mc より上に置いた画像)によって, BBB_mc が見えなくなったというだけではないでしょうか? ( マスク以前の問題で,  またFlash以前の問題で,  ミカンの上に布巾をかぶせると  ミカンは見えなくなります(当たり前)。) それと, 「マスクがかからない状態」 というのは 「すべてが見える状態」 ですよ。 「マスクがかかった状態」 というのが 「マスクの部分しか見えない状態」 です。 そこのところはわかっていらっしゃいますか? > BBB_mcは見えなくなってしまいます。 それだと, もし BBB_mc を覆い隠すような画像がないとするなら(ミカンを覆い隠す布巾がないとするなら) 少なくとも,マスクがちゃんとかかっている状態であるということになります。 もし,マスクがかかっていなければ逆で,何もしていない状態,つまり 「すべてが見える状態」 になります。 「BBB_mc に AAA_mc のマスクをかける」ということは, 「BBB_mc のうち AAA_mc と重なった部分だけが見える」 ということです。 AAA_mc と BBB_mc に重なった部分(座標的に重なった部分)がない場合は, BBB_mc は全体が見えなくなります。 BBB_mc にちゃんと AAA_mc のマスクがかかっているからこそ, BBB_mc全体が見えなくなるということです。 わかりますか? AAA_mc と BBB_mc の座標がずれていないかどうかと, 画像によって BBB_mc が覆い隠されていないかどうかをチェックしてみてください。 当たり前すぎて書くのも何ですが..., もし,BBB_mc を覆い隠す何かがある場合は,  (=もし,ミカンを布巾で覆い隠している場合は,) BBB_mc のあるレイヤーを覆い隠したもののレイヤーより上にしてください。  (=布巾の上にミカンを置いてください。) そうすれば,BBB_mc が何かによって見えなくなることはありません。  (=そうすれば,ミカンが布巾によって隠されることはありません。)  (泣きそうに当たり前...(ノ_・、)シクシク。) レイヤーの入れ替えをどうしてもスクリプトで解決したい場合は, 全くお薦めできませんが, 次のスクリプトをフレームのスクリプトの最初辺りにでも付け加えてみてください。 ---------------------------------- // BBB_mc を最高深度 にする BBB_mc.swapDepths(this.getNextHighestDepth()); ---------------------------------- これで, BBB_mc が最上深度に躍り出ますから, それを隠すような何かはなくなります。 繰り返しますがこれはお薦めできない方法です。 マスクに関してちゃんと理解した上で, 深度についてもちゃんと理解した上で, なおかつ, フレームがループ再生をしないような Flash を作成するときのみ使うべきものです。 (理由や原理がわかっていてもこういうときには普通は使わない。)  

negativeta
質問者

補足

とても親切な解説に感謝します。 ただ上記の解説文で一つ不明な点があるのですが、 上段の >setMask を使う場合,ムービークリップのレイヤーは全く関係ありません。 というのと中段にあるみかんの例の >画像によって BBB_mc が覆い隠されていないか この二つの違いがどうも理解できません; みかんの上を覆った布団の上から、布団を貫通して AAA_mc(マスクするmc)の範囲部分のみかんが見えるという考えだったのですが間違ってるのでしょうか;? 私の目的としましては、要するに 普段は小さなみかん(布団)が見えていて、 クリックするとAAA_mcの範囲が出現し、その範囲内に布団の下に隠れた 大きなみかん画像が見えるというような よくありそうなルーペを再現したいのです・・

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

ロード完了後にマスクをかけないためできないだけだと思います。 たとえば, ある階層(_root なら _root)に2つのムービークリップ「AAA_mc」と「BBB_mc」があったとします。 「AAA_mc」がマスクになるムービークリップで, 「BBB_mc」がマスクをかけれれるムービークリップだとします。 また, ロードする外部ファイルが 「bbb.jpg」 というファイルであったとします。  ある階層(_root など)    ├ AAA_mc ←マスクになる    └ BBB_mc ←「bbb.jpg」をロードする このとき,この「ある階層」のフレームに次のように書いても, 「BBB_mc」に「AAA_mc」のマスクはかかりません。 --------------------------------- BBB_mc.loadMovie("bbb.jpg"); BBB_mc.setMask(AAA_mc); --------------------------------- マスクがかからない理由は, 外部ファイル「bbb.jpg」がロード完了する前にマスクをかけているからです。 AS1 的(FlashMX以下的)に修正する場合は, 「ある階層」のフレームに次のように書いておいて, --------------------------------- BBB_mc.loadMovie("bbb.jpg"); --------------------------------- 「BBB_mc」自体には次のように書いておくとちゃんとマスクがかかります。 --------------------------------- onClipEvent (load) { this.setMask(_parent.AAA_mc); } --------------------------------- AS2 的(FlashMX2004以上的)に修正する場合は, 「BBB_mc」自体には何も書かず, 「ある階層」のフレームに次のように書きます。 ----------------------------------------------- // MovieClipLoaderクラスのインスタンス MCL を作成 var MCL:MovieClipLoader = new MovieClipLoader(); // ロード監視用にするオブジェクト LSN を作成 var LSN:Object = new Object(); // 外部ファイルロード完了時の動作を定義 LSN.onLoadInit = function(myTarget:MovieClip) { // ロードしたターゲットに AAA_mc のマスクをかける myTarget.setMask(AAA_mc); }; // MCL に LSN をリスナーとして登録 MCL.addListener(LSN); // 外部ファイル「bbb.jpg」を BBB_mc をターゲットとしてロード MCL.loadClip("bbb.jpg", BBB_mc); -----------------------------------------------

negativeta
質問者

お礼

ありがとうございました。初心者なりに急ぎの案件でしたので とても助かりました;

negativeta
質問者

補足

すみません、質問者です。 一つ解決できない事項が浮上してしまいましたので追加させてください; 上記の条件の場合、 Maskされる対象(BBB_mc)とMaskするMovieClip(AAA_mc)の間に 画像を一枚挟むと、BBB_mcは見えなくなってしまいます。 この場合、Scriptの記述は違ってくるのでしょうか

関連するQ&A