- ベストアンサー
rollover時にMCを動かす方法についての質問
- flashを使用してrollover時に右に段々表示される画像を再生させる方法が分からず、質問しています。
- 質問者はシーン1での作業を行っており、ボタンシンボルとMCを使用しています。
- ボタンシンボルのアクションスクリプトがうまく動かず、アドバイスが欲しいとしています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1 です。 > MCにはアクションを書かなくてもよいのでしょうか? MCにはインスタンス名は付けてありますよね。 そして1フレームと5フレーム目に stop(); を書かれているわけでしょう? その stop(); を書かれていらっしゃっるならそれ以上は何も書く必要はないという意味です。 しかし, ここ↓を読み返しているとなんだか変なことをされているようにも見えてきました。 > ・レイヤー2からレイヤーレイヤー6 > 5枚の画像を用意して、MCにシンボル化。 > それぞれフレーム1~5フレームに、 > アルファ0からアルファ100にいくモーションを作成。 > > レイヤー7 > アクションスクリプト > 最初の1フレームと5フレーム目にstop(); 私は, > 5枚の画像を用意して、MCにシンボル化。 > それぞれフレーム1~5フレームに、 > アルファ0からアルファ100にいくモーションを作成。 この部分を, ---1つのムービークリップ内のタイムライン------- レイヤー stop() stop(); レイヤー ・・・・|●-------->[]|●| 画像(グラフィックインスタンス) ↑↑↑ 1~5フレーム アルファが0から100になるモーショントィーン -------------------------------------- このように↑作成したムービークリップが5つある。 と解釈したのですが,違っているのでしょうか? このように作成しておいた上で, たとえば, このMCに「gazou22_mc」というインスタンス名を付けた場合, ボタンに on (rollOver){ this.gazou22_mc.gotoAndPlay(2); } のように書けば, この 「gazou22_mc」 内の画像のアルファは100に近づくので,だんだん出てきます。 ※すみません, this.gazou22_mc.gotoAndPlay(1); ではなくて, this.gazou22_mc.gotoAndPlay(2); にしないと動きませんね。 ここは訂正しなければなりません。 ただこれだと, そのレイヤーにいるままですから, 他のムービークリップの下にあった場合は見えません。 だから,ボタンのスクリプトで, swapDepths を使って上の深度上の深度に持っていかなければならないという意味を#1で書いたのです。 #1で書いた内容は理解できましたでしょうか? 以上のように考えると, ムービークリップには stop(); 以外に書くものはないでしょう? >FLASH5なので、深度はむりでした; 最初にバージョンを書かれていらっしゃらないので, 最適な回答もできないのです。 また,#1で書いた 参考URL はご覧になりましたか? 深度変更 swapDepths は FLASH5 で無理なのではありません。 getNextHighestDepth() が FlashMX2004以上でないと使用できないだけです。 これは #1 でも書きましたし,参考URLにも書いています。 また, http://hakuhin.hp.infoseek.co.jp/main/as/z.html#DEPTH_01 >「深度を変更したい」 >サンプルをダウンロード >z_01_fla05_as1.fla のサンプルは FLASH5 で作成されたものですから FLASH5 でも開けるはずです。 getNextHighestDepth() を使えば, 簡単に最高深度が得られるから便利なだけで, 必要ないと言えば必要ないものです。 上の z_01_fla05_as1.fla 内の, 各ムービークリップ内にあるボタンには, on (press) { this.swapDepths(_root.depth); _root.depth++; this.startDrag (false); // ドラッグを開始 } と書いてあります。 ドラッグなど関係ないわけですから, 関係あるのは次の部分だけです。 on (press) { this.swapDepths(_root.depth); _root.depth++; } _root に depth という変数があるものとして, その 変数depth の値を ++ で 1 ずつ加算しているのです。 こうすれば, 最高深度など得る必要はありませんね。 最高深度を得られないのなら自分で決めれば良いだけです。 したがって, FLASH5 の場合, ボタンに書くスクリプトは次のようになります。 --------------------------------- on (rollOver){ this.gazou22_mc.gotoAndPlay(2); this.gazou22_mc.swapDepths(_root.depth); _root.depth++; } ---------------------------------
その他の回答 (1)
- BlurFiltan
- ベストアンサー率91% (1611/1754)
ご質問を読む限りでは, ムービークリップに問題はないと思います。 考えるべきはムービークリップではなくボタンのスクリプトだと思います。 on (rollOver){ this.gazou22_mc.gotoAndPlay(1); } これをすると同時に, そのMC(この場合gazou22_mc)を一番上の「レイヤー」に移動させれば良いですよね。 「レイヤー」はActionScriptでは操作できませんが, swapDepths() でムービークリップの上下関係である「深度」は変えることができます。 「Flashゲーム講座&ASサンプル集【深度について】」 http://hakuhin.hp.infoseek.co.jp/main/as/z.html また上のページの一番下にも書いていますが, FlashMX2004 以上であれば, getNextHighestDepth で, そのとき,その階層(_root やムービークリップ)内 の最高深度のさらに1つ上の深度を取得することもできます。 ですから,次のようにすれば良いと思います。 on (rollOver){ this.gazou22_mc.swapDepths(this.getNextHighestDepth()); this.gazou22_mc.gotoAndPlay(1); } あとボタンからロールアウトしたとき, 最初の画像を最上深度に持って行くようにすれば, ロールアウトしたときに最初の画像に戻ります。
お礼
できました!! 早急に回答していただいたおかげで、本当に助かりましたTT ありがとうございました!
補足
MCにはアクションを書かなくてもよいのでしょうか? それと、アルファのモーションをかけたMCは、 ボタンレイヤーより上においていますが、何もうごきません。。 FLASH5なので、深度はむりでした; よろしければ再度アドバイス願いたいですTT
お礼
回答ありがとうございます。 すみません、補足ですが、投稿してから少し間違いを発見しました; >マウスがボタンの上に無い時、離れた時に、ムービー3(gazou_moto)に戻る、という動作を作っています。 gazou_motoではなく、moto_gazouでした。 これはここだけでの誤字なので、インスタンス名、アクションなどには問題ありません。 ● □ a がずれていますが、本来はまっすぐ整列しています。 そこは気にせずお願いします。。
補足
何度もありがとうございます、助かります! 早急なもので、焦っていました、 書き方が不足していたこと、詳しく書くべきだったと反省しています。 アドバイスを参考に作っていると、最初はうまく動かなかったのが、 1つ目のボタンが、動くようになりました。ありがとうございます! より詳しく説明しますと、長文になりますが、宜しくお願いします。 例として、ボタン2つ、ムービー3つ、グラフィック1つで、 1つ目のボタンをrolloverすると、ムービー1(gazou11_mc)再生、 2つ目のボタンをrolloverすると、ムービー2(gazou22_mc)再生、 マウスがボタンの上に無い時、離れた時に、ムービー3(gazou_moto)に戻る、という動作を作っています。 グラフィックは、ムービー3の画像だけのもので、最初の表示用に置いています。 ・今、1つ目のボタンは正常に動くのですが、 2つ目が動かないので、まだ試行錯誤しています;(これは私の記述に間違いががありそうです・・) ・ボタンアクションについては、自宅ではFlash5使用なのですが、 実際はFlashCSで作成するので、体験版のCS3をダウンロードしてきて、 作ってみました。 深度の書き方は、最初に回答いただいた on (rollOver){ this.gazou22_mc.swapDepths(this.getNextHighestDepth()); this.gazou22_mc.gotoAndPlay(2); } ↑を使わせていただきました。 URLからのflaもみました、ボタンにアクションが書いてあって、 クリックすると全面にくるので、それをロールオーバーにした形なんですね。 ----------------------------------------------------- ボタンアクション ・ボタン1 on (rollOut) { this.moto_gazou.gotoAndPlay(2); this.moto_gazou.swapDepths(this.getNextHighestDepth()); } on (rollOver) { this.gazou11_mc.gotoAndPlay(2); this.gazou11_mc.swapDepths(this.getNextHighestDepth()); } ・ボタン2 on (rollOut) { this.moto_gazou.gotoAndPlay(2); this.moto_gazou.swapDepths(this.getNextHighestDepth()); } on (rollOver) { this.gazou22_mc.gotoAndPlay(2); this.gazou22_mc.swapDepths(this.getNextHighestDepth()); } ----------------------------------------------------- ムービークリップ内 (1→5フレーム、aはstop();です) a ││ □a ●→→→● アルファ0→100のモーション ----------------------------------------------------- シーン1のレイヤー (1→5フレーム、aはstop();です) action a ││□a ムービー2 ● ││□ ムービー1 ● ││□ ムービー3 ● ││□ グラフィック● ││□ ボタン ● ││□ フレーム1 フレーム5 こんな感じに並べています。 その前は、 ↓のようにレイヤーをムービー3つを横にならべて、作っていましたが、、 それだと動かなかったので。。 action a □a □a □a ムービー ● □● □● □ (3,1,2) グラフィック ● □ ボタン ● □ フレーム1 5 10 15 ----------------------------------------------------------- ボタンアクションを1つ目 on (rollOut) { this.moto_gazou.gotoAndPlay(2); this.moto_gazou.swapDepths(this.getNextHighestDepth()); } on (rollOver) { this.gazou11_mc.gotoAndPlay(6); this.gazou11_mc.swapDepths(this.getNextHighestDepth()); } 2つ目 on (rollOut) { this.moto_gazou.gotoAndPlay(2); this.moto_gazou.swapDepths(this.getNextHighestDepth()); } on (rollOver) { this.gazou22_mc.gotoAndPlay(11); this.gazou22_mc.swapDepths(this.getNextHighestDepth()); } ------------------------------------------------------------- 何かおかしい点があればアドバイスお願いします;