- ベストアンサー
Flash-ステージ上でクリックしてMovie再生
Flashでステージ上のどこかをクリックした時、指定されたムービークリップシンボルを、そのクリックされた場所で再生する方法はあるでしょうか? そしてその後一度再生されたシンボルは再生されないようにできるでしょうか? 詳しい方がいらっしゃいましたらアドバイスをよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
指定されたムービークリップのインスタンス名を仮に、「clipMovie」とします。クリックするターゲットをボタンシンボルで仮定し、そのシンボルを仮に「button」とします。そして、2つとも同じレベルにあることを想定し説明します。さらにその「clipMovie」は最初見えない状態であることにします。 まず、「clipMovie」を選択し、そのActionScriptを下記のように記述します。 //clipMovieのActionScript onClipEvent(load){ this.stop(); this._visible=false; } onClipEvent(enterFrame){ if(this._currentframe>1){ this._visible=true; } if(this._currentframe==this._totalframes){ this.stop(); } } 最初から「clipMovie」をロード(load)しておきます。但し見えるといけないので、不可視状態にし、フレーム1で止めておきます。プレビューしてみるとわかりますが、「clipMovie」は見えないはずです。 そして(enterFrame)で、何かアクションがおき、「clipMovie」のフレームが1よりも後のフレームに飛んだときに可視状態にします。ただし、今回のスクリプトは、もしフレーム1に戻るとフレーム1に来たとき(フレーム1だけ)に不可視になります。そして、「clipMovie」の最後のフレーム(_totalframes ちなみに_totalframesは最後のフレームという意味ではありません。そのクリップムービーの全部のフレームのいみです。)に来たら止まります。もし任意のフレームで止めたい場合は、 //フレーム20の箇所で止めたい場合 if(this._currentframe==20){ this.stop(); } となります。 つぎに、「button」のActionScriptを記述します。 //buttonのボタンクリップのAvtionScript //clipMovieの10フレームから動かしたい場合 on(release){ with(_root.clipMovie){ if(_currentframe==1){ gotoAndPlay(10); }else{ stop(); } } となります。つまり、「clipMovie」のフレームが1だったら、フレーム10から動け!となります。先ほど、「clipMovie」の設定したので、フレーム10に行った時には可視状態で、最後のフレームで止まります。さらに、もう一度ボタンをReleaseしても「clipMovie」は最後のフレームで止まったままです。何故かは、「ボタンをReleaseした時に、もしフレーム1だったら10から動け!もしフレーム10以外だったらストップ」だからです。 補足ですが、もしclipMovieの最後のフレームまで到達する前にボタンをReleaseするとその場所で止まってしまいますので、この場合は、 else{ stop(); }は、記述しない方がいいかもしれません。 後は、応用ですので頑張ってください。 また、回答内容の方向性が違いましたらごめんなさい。
その他の回答 (2)
- noias
- ベストアンサー率82% (23/28)
#2ですが、flash5以下では出来ません。 MX以降です。
- noias
- ベストアンサー率82% (23/28)
これでどうでしょうか。 1. 再生したいmcをリンケージ化し名前を設定。(ここではhoge) 2. タイムラインに以下を記述(ここでは_root) this.onMouseDown = function() { if(!flg){//flgが存在しない場合に実行 place = {_x:_xmouse, _y:_ymouse}; attachMovie("hoge", "hoge", 0, place); flg=!flg;//flgを存在させる } }; 3. 再生させるmcの最終フレームに用途に合わせて以下を記述。 a.最終フレームでストップ stop(); b.最終フレームで消去 this.removeMovieClip(); ※クリックするたびに再生を実行したいのであれば2.のifを取り除けばよいでしょう。