• 締切済み

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

  • FLASH8を使用し、as2.0で制作しています。

    FLASH8を使用し、as2.0で制作しています。 http://okwave.jp/qa/q5457905.html で質問されていた、「XMLから読み込んだテキストをリンク表示する方法」を参考にしています。 URLなどは問題なく読み込むのですが、 xmlで読み込んだ画像のパスを、loadMovieで表示させるには、どうすればいいですか? loadMovieに直接パスを記入すれば、正常に表示される状態です。 trace();で出力すると画像へのパスが問題なく表示されるのですが、それをloadMovieに代入してもunderdefineになってしまいます。 とても初歩的なことだと思うのですが、宜しくお願いします。

    • ベストアンサー
    • Flash
  • AS3.0 配置したインスタンスにswfの読み込み

    初歩的なご質問です。 AS3.0にて、ステージ上に配置したムービークリップ(インスタンス名:mc)に外部swf(test.swf)を読み込みたいのですが、、どうもうまくいきません。 わかりやすく申しますと、AS2.0形式では mc.loadMovie("test.swf"); となっているスクリプトをAS3.0で行いたいです。 拙い文章で恐縮ですが、よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ASで降らせた雪のマスクの掛け方について。

    下記のサイトのASを使用させていただき、雪の降るFlashを作成したのですが、 参照サイト : http://www.webdesignlibrary.jp/2006/06/flash_snow.php このスクリプトで降らせた雪を、例えば星型の図形をマスクにして、 その範囲内で雪が降るようにしたいと思い、 色々と丸一日掛けて調べたのですが、全く上手く行きません。 とりあえず、色々と調べてみた結果、 【 xxx.setMask 】 を使えば良いのだろうか・・?、、、と言う所までは 行き着いたのですが、スクリプトを、どう改造?してみても、全く思う結果が得られません。 【 _root.setMask 】 で、ステージ全体を、目的の図形MCでマスクする事で、 思う結果に近しいカタチは出来たのですが、_root.setMask でステージをマスクしてしまうと、 例えば、マスク外に何か画像処理を施したくても、マスク外の画像は全て消えてしまいますし、 その画像の大きさ込みでマスクを作成すると、その画像の上にも雪が降ってしまうので、 完全に行き詰ってしまっています。 ASで降らせた雪だけをマスクする方法はありますでしょうか? どなたか、ご存知の方がいらっしゃいましたらば、 是非にご教示願えますと、大変ありがたいです。  何卒よろしくお願い申し上げますm(_ _)m 以下、使用AS ------------------------------------------------ width = 550; height = 400; total = 200; for (var t = 0; t != total; t++) { var mc = _root.attachMovie("snowflake", "snowflake"+t, _root.getNextHighestDepth()); mc._x = (Math.random()*(width+20))-10; mc._y = (Math.random()*(height+20))-10; mc.yspeed = (Math.random()*1.75)+0.25; mc.speed = (Math.random()*3)+2; mc._xscale = mc._yscale=(mc.speed+mc.yspeed)*10; mc.onEnterFrame = function() { var angle = Math.atan2(_root._xmouse-(width/2), _root._ymouse)+1.5707963267949; this._y += Math.sin(angle)*this.speed+this.yspeed; this._x += Math.cos(angle)*this.speed; if (this._x>width+10) { this._x = -10; } else if (this._x<0-10) { this._x = width+10; } if (this._y>height+10) { this._y = -10; } else if (this._y<0-10) { this._y = height+10; } }; } ------------------------------------------------ 【 AS使用環境 】 Adobe Flash CS3, アクションスクリプト2.0

    • ベストアンサー
    • Flash
  • FlashMXによる外部Jpegファイルの読込について

     FlashMXを使用して外部のJpegファイルを動的に読み込み表示したいと考えています。    MCというmovieClipを_root直下に設置したとして、  さらにMCの中にMC2というmovieClipを設置しています。   _root.MC.MC2.loadMovie("aaa.jpg");  のようにaaa.jpgというファイルを読み込んだ場合、MC2が"aaa.jpg"と置き換えられるような形でロードされると思います。    その際に、画像ファイルのサイズが用意したmovieClipのサイズよりも大きい場合、枠をはみ出したような形で表示されてしまいます。    ロードされたJpegを、元の画像のサイズではなく伸縮して常にMCのサイズにフィットしたサイズに表示させたいのですが果たして可能でしょうか? (_root.MC._widthなどを使った間接的なサイズの変更をやってみましたが、レイアウトがどうもうまくいきませんでした。)    また、loadMovieによる読込では実現不可である場合、コンポーネントのスクロールペインなども検討しているのですが、他にも何かよい方法・アイデアなどがあればご教授ください。  よろしくお願いします。

  • AS2とAS3の違いについて質問です。

    AS2とAS3の違いについて質問です。 今度、フルフラッシュのサイトを制作しなくてはいけないのですが、そこで必ず外部XMLを読み込むというのが必須になってきます。 更新情報や画像を読み込むようなXMLです。 以前AS2で行いましたが、どうしてもXMLをHTMLで表示する部分がうまくできませんでした。(デザイン的にできないことが多すぎて) いろいろ調べると、なかなか難しいようですね。 知人に聞いたところ、AS3で作ればそこらへんもっと作り込めると聞いたのですが、本当でしょうか? 納期の事もあり、今からAS3を学んで…となるとだいぶ不安です。 AS2でもHTMLをうまく表示できるのであれば、ご教授いただければうれしいです! よろしくお願いします。

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

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

  • as3でのmc再生について

    as3でご質問です。 現在as3で、ほとんどをmain.asというasファイルに書いて配置など行っております。 モーションなどがあるmcに関しては、ムビークリップを作って、ライブラリに読み込んであるのをリンケージして呼び出しています。 そこで質問です。 var bn01:MovieClip = new fr_bn01(); var bn02:MovieClip = new fr_bn02(); var bn03:MovieClip = new fr_bn03(); addChild(bn01); addChild(bn02); addChild(bn03); //fr_bn01、fr_bn02はflash上で作成した何フレームかあるmcです。 例えば、bn01の最後のフレームまでいったら、bn02が出現して再生、bn02が最後のフレームまでいったらbn03が出現、再生。 とする場合、どのような書き方をすればよろしいでしょうか。 お手数をおかけしますが、ご教授いただけたらと思います。 よろしくお願いします。 環境:CS3、as3.0

    • ベストアンサー
    • Flash
  • loadMovieの大きさを固定したい

    環境:WindowsXP,FlashMX2004 loadMovieで外部画像を読み込んでいます。その画像は書き換えられ、大きさが変わることがあります。 現在は外部画像の大きさに合わせてloadMovieで表示されるサイズが変わってしまいます。 画像の大きさが変わってもいつも同じサイズで表示したいのですがどのようにしたら良いのでしょうか?

    • ベストアンサー
    • Flash
  • AS3での外部swfの制御

    こんにちは。 Flashのコードについて質問させていただきます。 AS3で外部swfを読み込み、制御したいのですが上手くいきません。 ここでいう外部swfはflashで作ったものではなく、aftereffectsでswfで書き出したものです。 var swf:MovieClip; var loader:Loader = new Loader(); var newSWFRequest:URLRequest = new URLRequest("swfs/" + "test" + ".swf"); loader.load(newSWFRequest); addChild(loader); 上記コードでswfを表示+再生は出来ます。 更に、swfを停止、再再生、逆再生などしたいのですが、可能でしょうか? そもそもこのswfにはタイムラインという概念が存在しないので微妙ですが。。。 swf = new MovieClip(); swf .stop(); とか書き足せば、 TypeError: Error #1034: 強制型変換に失敗しました。flash.display::AVM1Movie@231c04a1 を flash.display.MovieClip に変換できません。 が出ます。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • as3 クラスファイルからルートにaddChildしたmcへのアクセス

    as3 クラスファイルからルートにaddChildしたmcへのアクセス いくつか似たような記事はあったのですが、解決せず質問させていただきます。 ルートにtestというmcを配置しています。 それに、外部のswfをaddChildしてます。 ~中略~ var loadMc:MovieClip = loader_obj.content as MovieClip; test.addChild(loadMc); これはうまくいっています。 このtestをクラスファイルから操作したいのですが、 ■クラスファイル(test.as)抜粋 MovieClip(root).test.x = 100; これでうごくかな~と思ってたんですが、 TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。 at MethodInfo-181() このエラーが出ます。 どうしたらよいでしょうか。。。。

    • ベストアンサー
    • Flash