- 締切済み
モーションするシンボルの通った部分を消したい。
円形のモーションシンボルをガイドに沿って動かしています。 シンボルの通った部分だけ、そのシンボルの後ろにある背景を消して 下のレイヤーが見えるようになる。というアニメーションを作りたいのですが シンボルの通った部分の背景を消す方法が分かりません。。。 マスク使って下のレイヤーを透けさせることはできるのですが シンボルの通った部分を透けさせたままにしておく方法などあるのでしょうか?? ver: Flash MX 2004
- みんなの回答 (1)
- 専門家の回答
みんなの回答
あまり良いアイデアではないかもしれませんが, 一応回答します。 この回答は長いですが, 大筋は, > マスク使って下のレイヤーを透けさせることはできるのですが この方法を使います。 マスク使って下のレイヤーを透けさせます。 今作成中のファイルをさわると, 元の状態に戻せなくなるかもしれないので, 下の説明では, とりあえず簡単なサンプルを新規で作ることをお薦めします。 > 円形のモーションシンボル この 円形のもの は ムービークリップ に変換してくさい。 すでにしてあればそのままで良いです。 また,円形のもの は中を 塗り で塗りつぶしてあるようなものにしてください。 線の枠だけの 円 ではだめです。 円の中に何色でも良いので 塗り がある 円 にしてください。 > シンボルの通った部分だけ、そのシンボルの後ろにある > 背景を消して下のレイヤーが見えるようになる。 これは,「後ろにある背景」 と 「その下のレイヤー」 を逆にしましょう。 ※ また, シンボルとインスタンスの言葉が違っていますから, 以下円形のものはシンボルではなく 円形のインスタンス という言い方に変えます。 タイムラインの各レイヤーを図示すると次のような感じです。 □ レイヤー 筆・・|○| (←スクリプトを書くレイヤー) □ レイヤー 筆・・|●| ←モーションガイド □ レイヤー 筆・・|●| ←円形のインスタンス □ レイヤー 筆・・|●| ←背景の後にあるバック(BG) □ レイヤー 筆・・|●| ←インスタンスの後にある背景 背景の後にあるバック(BG) が何のことかわからないかもしれませんが,私もわかりません(ガクッ)。 というか,元の円形インスタンスの後にある背景の下のレイヤーはどうなっているのでしょうか? もし, 元の円形インスタンスの後にある背景の下のレイヤーに何もなくて, ステージがそのままある場合は, 上図の 背景の後にあるバック のレイヤーに, ステージの色(デフォルトでは白)の塗りをステージ全面に用意して, その(白の)塗りをムービークリップに変換し, 下のプロパティインスペクタで,インスタンス名に「BG」という名前を付けてください。 もし, 元の円形インスタンスの後にある背景の下のレイヤーに何かある場合は, その 何か をムービークリップに変換して, 下のプロパティインスペクタで,インスタンス名に「BG」という名前を付けてください。 書きたいことは, 「元の円形インスタンスの後にある背景」と「その下のレイヤー」を逆にすると言うことと, 元の「その下のレイヤー」にあるものをムービークリップに変換して,「BG」というインスタンス名を付けるということです。 そして, 円形インスタンス(ムービークリップ)にもインスタンス名を付けます。 ここでは, 「myMC」 というインスタンス名を付けたとしておきます。 「myMC」 というインスタンス名を付けるのですが, すでにキーフレームがいくつかある場合は, 全てのキーフレームの 円形インスタンス に同じ「myMC」 というインスタンス名を付けてください。 本来はキーフレームを作る前に, 「myMC」 というインスタンス名を付けておいた方が良いわけです。 すると1つ1つに同じ名前を付ける必要はなくなります。 ステージの準備の話は以上です。 = = = = = = = = = = = = = = = = = = = = = = = 次にライブラリの編集に入ります。 「ウィンドウ」→「ライブラリ」でライブラリを表示させてください。 すでに表示してあったらそのままでかまいません。 ライブラリの中に 上の 円形のムービークリップ(こちらがシンボルです) があると思いますから, その 円形のシンボルを選択して, 右クリック→「リンケージ」で「リンケージプロパティ」パネルが出てきます。 そこで, □ ActionScriptに書き出し と □ 最初のフレームに書き出し にチェックを入れて(最初のフレームに書き出し は自動的に入ります), そして上の 識別子 の欄に識別子を付けるわけですが, ここでは 「mySymbol」 という識別子を付けておきます。 この 「mySymbol」 という識別子のムービークリップを, ActionScriptでステージ上に呼び出すのです。 ライブラリの準備の話は以上です。 = = = = = = = = = = = = = = = = = = = = = = = 次にスクリプトです。 □ レイヤー 筆・・|○| (←スクリプトを書くレイヤー) を用意してください。 すでに用意してあればそのままで良いです。 そして, 円形インスタンス(インスタンス名「myMC」)が登場するフレームをキーフレームにして, (フレーム1 から登場する場合はキーフレームにする必要はありません) 次のスクリプトを書くと(コピペすると), 円形インスタンスの通過した点に, 「mySymbol」 が呼び出され, その部分に 「BG」 へのマスクがかかります。 ------------------------------------ // 空のMC インスタンス名 myMask を _root に作成 _root.createEmptyMovieClip("myMask", 0); // MC BG に myMask のマスクをかける _root.BG.setMask(_root.myMask); // myMask 内の変数 i の初期化 _root.myMask.i = 0; // // 1フレーム進む時間ごとに毎回実行 _root.myMask.onEnterFrame = function() { // もし i が20以下であれば // (i には 1048575 までを指定可能) if (i<=20) { // i に 1 をプラスする i++; } else { // それ以外は 0 に戻す i = 0; } // myMask 内に mySymbol を attachMovie _root.myMask.attachMovie("mySymbol", "myMC"+i, i); // その MC の座標を myMC と一致させる _root.myMask["myMC"+i]._x = _root.myMC._x; _root.myMask["myMC"+i]._y = _root.myMC._y; }; ----------------------------------- 「BG」 の,円形インスタンスの通過した点に,マスクがかかるため, その部分だけ「BG」が見えます。 つまり,その部分だけ,「インスタンスの後にある背景」が見えなくなります。 勝手に if (i<=20) という, やたら少ない数にしてありますが, これは,この数によって結果がどう変わるかをわかりやすくするために, わざと少なくしてあります。 この 20 は書いている通り,もっと増やせます。 しかしあまり数を増やすとメモリやCPUに負担をかけますから, 動作がだんだん遅くなってくる可能性があります。 = = = = = = = = = = = = = = = = = = = = = = = その他 もし途中で, インスタンス通った部分を透けさせるのを一時停止したい場合は, 何か変数でフラグを立てて, _root.myMask.onEnterFrame = function() { if ( フラグが1の場合 ) { // もし i が20以下であれば // (i には 1048575 までを指定可能) if (i<=20) { // i に 1 をプラスする … 省略 … _root.myMask["myMC"+i]._y = _root.myMC._y; } }; こんなような感じにしておいて, フラグの値を 1 とか 0 とかに切り換えても良いと思います。 もし, インスタンス通った部分を透けさせた部分を削除し, その動作を完璧にやめたいときは, マスクを削除して, BGを非表示にする _root.myMask.removeMovieClip(); _root.BG._visible = false; こんな感じのスクリプトで行けると思います。 ボタンに書くなら on (release) { _root.myMask.removeMovieClip(); _root.BG._visible = false; } です。 色んな場合を書いていると,きりがないのでこの辺で…。 とにかく,上のようにすると, ご質問で書かれていることか,書かれていることに似たようなことはできます。 もし,この方法で行くと決めたとするなら, 「円のインスタンスの動く速さをどうする」 とか 「ムービークリップBG の中に複数の物を入れる」 とか, この方法でできるように, 作品全体の構成自体を考えてみてください。
お礼
ありがとうございます。 試してみます。