• ベストアンサー

ボタンクリック一回ですべてのMC再生停止

ボタンクリック一回ですべてのMC再生停止 はできるのでしょうか? もう一回押したら再生を再開したいのです。 何故、このような事をしたいかと言いますと、 FLASH内のあるボタンを押すと ポップアップウインドウが開いてそこで MPEGを再生したいのですが FLASH自体が非常にアニメーションが多く、とても重いので、 MPEGがカクカクしてしまうのです。 そこでポップアップを開くときのボタンを押すのと同時に FLASH内すべてのアニメーションを停止したいのです。 他の方法でも構いませんので 解決方法がありましたら是非おしえてください。

  • Flash
  • 回答数3
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

ご質問に書かれている,その MC内 の動きというのは ActionScriptによるアニメーションではなく, タイムラインを使ったアニメーションで,stop(); で止まるという前提で回答します。 ActionScript で動かした動きなんて stop(); では止められませんから, 動かした方の責任で止めてください(笑)。 『stopAllSound』(全ての音を止める) という関数があるくらいだから, 『stopAllMC』 なんて物はないものか? と思ってGoogleで 「stopAllMC」 と検索したら,日本語ページで1件だけヒットしました。 しかし,そのページはすでに消えている?ので,そのキャッシュからの引用です。 --- 引用 ----------------------------- //■sample for "for..in" loop function stopAllMc () {   for(var i in this) { //iは、オブジェクトのプロパティなどの文字列     var child = this[i]; //this[i] は、値または参照値     if(child instanceof MovieClip) { //インスタンスタイプがムービークリップならば       child.stop();     }   } } -------------------------------------- さすがにキャッシュページのURLは書きにくいので, 詳細が必要でしたらそのページを検索して参考にしてください。 この for文 の書き方は,Flash ではあまり目にしませんが,VBA ではよく目にする形です。 Excel VBA のページで,あまり参考にはならないかもしれませんが…。 「★For Each...Next ステートメント」 http://www.sigoto.co.jp/excel/statement/state09.htm というわけで, 上の引用スクリプトをボタンのスクリプトとして, また _root に関して通用するようにカスタマイズすると次のようになります。 -------------------------------------- on (release) { for (var i in _root) { var child = _root[i]; if (child instanceof MovieClip) { child.stop(); } } // ココにmpeg再生のスクリプトを書く } -------------------------------------- しかし,これでは _root に対する 子(child)MC のタイムラインの動きしか止まりません。 もし,その 子(child)MC の中にさらに 子(child)MC があった場合は次のようになります。 -------------------------------------- on (release) { for (var i in _root) { var child = _root[i]; if (child instanceof MovieClip) { child.stop(); for (var j in _root[i]) { var grandchild = _root[i][j]; if (grandchild instanceof MovieClip) { grandchild.stop(); } } } } // ココにmpeg再生のスクリプトを書く } -------------------------------------- コピペして「自動フォーマット」ボタンを使ってインデントをつけてもらえばわかりやすいですが, かなり入れ子状になっています。 しかし,まだこれでは _root に対する 孫(grandchild)MC のタイムラインの動きしか止まりません。 もし,その 孫(grandchild)MC の中にさらに 子(child)MC があった場合は… と,書いているときりがないので,もしそんな場合は考えてください。 同じ要領で行けますよ。 ちなみに ひまご【曾孫】 は great-grandchild らしいので great_grandchild くらいをオブジェクト名に使って さらにちなみに, ひひまご【曾曾孫】 は知りませんので,super_great_grandchild くらいをオブジェクト名に使えば良いのではないでしょうか。 オブジェクト名なんてどうでもいい話ですけどね。 stop(); しか書いていませんが play(); も同じですからわかりますよね。 --- 動作環境及び注意 ---------------- 以上のスクリプトは, 作成可能環境 Flash MX 以上 動作環境 Flash Player 6 以上 です。 ちなみに SWF を非圧縮でパブリッシュすると,Flash Player 5 でも閲覧可能ですが, ボタンをクリックしたとたん,for文ループで無限ループに入り,フリーズしてしまいます。 今時 Flash Player 5 の方もいないとうので,大丈夫だと思いますが, SWF は圧縮でパブリッシュして, Flash Player 5 以下の方には閲覧をご遠慮頂く方が良いと思います。

yui0909
質問者

お礼

ありがとうございます!! いつもいつもすみません>< #2さんのやり方で出来ました。 わざわざ説明いただいてありがとうございます。 大変勉強になりました!

その他の回答 (2)

noname#35109
noname#35109
回答No.3

#1です。 すみません,代返よろしいでしょうか。 > FLASH再生中に右クリックして > 再生のチェックボックスのチェックをはずすと > ムービーが止まりますよね? Windows 環境と Mac環境で違うようです。 Windows 環境では, 再生のチェックボックスのチェックをはずすと _root のタイムラインの動きしか止まらず, MC 内の動きは動きっぱなしになりますが, Mac では, _root のタイムラインの動きどころか,MC内の動きまで止まります。 また Mac 対応の全てのブラウザでそうなのかはよくわかりません。 > あれはなぜでしょう。 ブラウザか,OSか, その環境対応の Flash Player の仕様でしょう。 > 右クリックメニューをカスタマイズできると思うので > あれを使ってうまく出来ることもあるのでしょうか? こういうことでしょうか↓? -------------------------------------- // コンテキストメニュー作成 myMenu = new ContextMenu(); // コンテキストメニューアイテムオブジェクト作成 myMenu1 = new ContextMenuItem(); // キャプション名の設定 myMenu1.caption = "★全てストップ★"; // 動作する関数の指定 myMenu1.onSelect = stopAllMc; // --動作するユーザ関数の定義-- // #2の方のAS無断引用です(謝) function stopAllMc(mc:MovieClip) { for (var obj in mc) { if (mc[obj] instanceof MovieClip) { mc[obj].stop(); stopAllMc(mc[obj]); //再帰処理 } } } // コンテキストメニューにアイテムを割り当て myMenu.customItems.push(myMenu1); // コンテキストメニューをメニューに割り当て _root.menu = myMenu; --------------------------------------- 参考URL http://oshiete1.goo.ne.jp/kotaeru.php3?q=2149143  ↑教えて!goo  ↓OKWave (同じです) http://okwave.jp/kotaeru.php3?q=2149143

yui0909
質問者

お礼

ほんとに何から何まですみません・・ マックと違うのですね。。 普通に考えたら単純そうな作業ですが すべていっぺんに停止ってこんなに複雑なのですね^^ 大変勉強になりました! こんなに毎回詳しく書いてくれて 神様にしかみえません 笑 ありがとうございました!

  • perse
  • ベストアンサー率74% (113/152)
回答No.2

再帰処理を使えば子、孫、曾孫…のMCの動きを止めれますよ。 再帰処理というのは関数の中で自分自身を呼び出す処理のことです。 //---------------------------------------------- //関数 mc:ムービークリップ function stopAllMc(mc:MovieClip) { for (var obj in mc) { if (mc[obj] instanceof MovieClip) { mc[obj].stop(); stopAllMc(mc[obj]);//再帰処理 } } } //関数呼び出し stopAllMc(_root);//最初にMCを指定 //---------------------------------------------- MCの中にMCが見つからなくなるまでループするので全てのMCでstop()が実行されます。 ただし、最初に指定したMCの中を全て見て回るので効率が悪いです。 MCの数が決まっているならインスタンス名をつけて配列にして管理した方がいいかもしれません。 var mc_array = new Array(); //全てのmcを配列に入れる mc_array[0] = _root.mc1; mc_array[1] = _root.mc1.childmc1; mc_array[2] = _root.mc2; for (var i = 0; i<my_array.length; i++) { my_array[i].stop(); }

yui0909
質問者

お礼

ありがとうございます! そのままやったら見事とまりました!! 一つお聞きしたいことがあるのですが、 FLASH再生中に右クリックして 再生のチェックボックスのチェックをはずすと ムービーが止まりますよね? あれはなぜでしょう。 右クリックメニューをカスタマイズできると思うので あれを使ってうまく出来ることもあるのでしょうか?

関連するQ&A

  • タイムラインを自動停止、クリックで再生

    Flashの超素人です。 すいません。教えてください。 再生しているFlashムービーを、指定したフレームで自動で停止。 その後、ムービーの画面をクリックすることで、次のフレームから再生を再開、また指定したフレームに来たら自動で停止。 と、この繰り返しをやりたいです。 止めたいところにキーフレームを入れて「一時停止(?)」 そこに、画面全体に透明ボタンをつけて、クリックすると「再生開始」 とすればよいのかな? と思うのですが、それをどうやって実現すればよいのか、、、なかなかうまくいきません。 というか、機能がいろいろあって、どれをどう使ってよいのか、判断ができなくて困っています。 素人でもわかるように、教えていただけますと助かります。 どうぞ、よろしくお願いします。

  • Flash5での一時停止と再生

    現在、Flashであるアプリケーションの教材を作っています。 一時停止ボタンをクリックすると、ナレーションとオブジェクトが同時に動きを止め、再生ボタンをクリックすると、止まったところから再生されるようなものを作りたいと思っています。 どうやったら、上手くできるでしょうか? はっきり言って、Flashはど素人です。 ActionScriptって何???状態なので、誰か助けてください。。。

  • FLASHでボタンを押すと、FLASHムービーが再生から停止までいくようにしたいです。

    FLASHの初心者です。 以下の物が作りたくてチャレンジをしております。 構成的には、一個の画面と、一個のボタンがあり、 あらかじめFLASHムービーを何個か作り、 一個のFLASHファイルに読み込んで、 ボタンを押すと一個目のムービーが再生、最終フレームで停止、 もう一回ボタンを押すと次のムービーが再生、最後… という具合にしていきたいです。 おそらくアクションスクリプトを使用して作らなければならないと 思うのですが、うまくできないのです… ついでにもう一つ、お聞きしたいことがあります。 フレーム数を右下に常に表示させたいです。 この方法も教えて欲しいです。 使用ソフトはFLASH CS3で、アクションスクリプトは3.0を使っています。 説明下手ですみません… よければ誰か助けてください>△<

  • 一つのボタンで再生と停止を行う方法

    今、HP上で動画の再生を考えています。 再生する動画ファイル(動画.swf)のファイルサイズが5MBぐらいです。ファイルサイズが大きい為、この動画.SWFを外部ファイルとしてもう一つ再生用フレーム(テレビ.swf)を作成し、そこから動画ファイルを読み込むようにしています。 この際に、テレビ.flaで再生ボタン、停止ボタン、一番初めに戻るボタン計3つを作成しています。 一応、全てのボタンを機能さすことができました。 再生ボタンは、loadmovieで動画.swfを読み込んでいます。停止ボタンは、動画.swfをstopかけます。 一番初めに戻るボタンも_root.動画.swf.gotoPlay(1)で出来ています。 なにをしたいかというと、停止ボタンで停止したのちもう一度、停止ボタンを押すと停止部分から再生されるようにしたいのです。 停止ボタンとプレイボタンを作成すればできますが、停止ボタンで停止と再生が出来ません。 それと、もう一つ。 メモリーを再生中動かしているんですが、動かすだけはできました。しかし、このメモリーを戻したり、進めたりが出来ません。どのようにすればいいのですか? すごく、大雑把な説明ですみません! 宜しくお願いします。

    • ベストアンサー
    • Flash
  • ボタン化されたMCの移動

    ホームページの中の小バナーをクリックすると表示される新規ページの全画面Flashを作っています。 http://www.facial-index.com/ 上記のページをクリックすると別窓で表示される新規ページの全画面Flashでは、「consept」等のナビゲーションをクリックすると画面構成が変わりますが、ナビゲーションは右の方に移動します。 このナビゲーションはMCをボタン化したものですよね。 このボタン化されたMCを押すと画面が変わる方法はフレームにラベルをつけて、そのラベルに飛ぶ設定を考えています。 わからないのは画面が変わる際に、すべてのボタン化されたMCが右の方に移動するASをどのように設定すればいいかということです。 どなたかご教授いただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • mcが最後まで再生されるのを待って、on(press)を受けるようにしたい

    flash初心者です。 main_mcの中に、たくさんのmcを配置し、タイムラインに配置したボタンをクリックすると,mcが再生するよう作りました。 こんなかんじです。 on (press) { _root.main_mc.mc_017.gotoAndPlay(2); } フレーム1にはstop();が書いてあって 何の操作もしないときは再生しないようにしてあります。 そこまではできたのですが、再生中の間も、 ボタンをクリックするとmcの2フレームに戻り、再び再生されてしまいます。 最後まで再生されるのを待って、on(press)を受けるようにしたいのですが どうしたらいいでしょうか。 使用しているのはFLASHMX, mac os 10.4.11です。 初歩的な質問かも知れません。 ご教授いただけると幸いです。

    • ベストアンサー
    • Flash
  • PowerPointでクリック1回で2つ以上のアニメーションを連続再生

    PowerPointのアニメーションで、クリック1回に対して2つ以上のアニメーションを連続で再生できるでしょうか?あくまで、2つ同時ではなくて2つ以上のアニメーションを1つずつ連続にさせたいと考えております。

  • IEで1回クリックしないとボタンとかが有効にならない。

    IEだけ1回クリックしないと、ボタンとか押せないのを、1回クリックしなくても他のブラウザ同様FLASHが動作するようにできる方法はありますか? もしあれば教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • ボタンクリックでページ移動しないようにするには

    初心者でphpでホームページを作っていますが、 フォームボタン(ポップアップ)を3回押すと3回戻るしないと元のページに戻りません。 これをページ遷移せずにする方法はありませんか、お願いします。

    • ベストアンサー
    • PHP
  • 再生中のフラッシュ・巻き戻し・一時停止

    ブラウザで再生中にフラッシュを一時停止させたり、巻き戻したり、できないのでしょうか。 (ボタンがついてない限り、できないと思うんですが)

    • ベストアンサー
    • Flash

専門家に質問してみよう