- ベストアンサー
3つのムービークリップ再生・巻き戻しの順番制御
初めまして。 初心者につき、基本的な事だとは思うのですが、調べても分からなかったため、こちらで質問させて頂きたいと思います。 3つのムービークリップ(a_mc,b_mc,c_mc)【フレーム数30】と、 各々を再生させるためのボタン(A,B,C)を使って、 b_mcを再生中にAのボタンを押すと、b_mcを巻き戻した後で、 a_mcを再生するといった感じで3すくみのような状態にしたいのですが、b_mcの巻き戻しとa_mcの再生が同時に行われてしまいます。 現在のActionScriptは以下のようなものなのですが、どなたかご教授願えませんでしょうか? よろしくお願いいたします。 ボタンAのスクリプト on (release) { //Cの巻き戻し _root.c_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame();} else {delete this.onEnterFrame} } //Bの巻き戻し _root.b_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame();} else {delete this.onEnterFrame} } //BでもCでもないときの判別式? //Aの再生 _root.a_mc.onEnterFrame = function() { if (this._currentframe<=29){ this.gotoAndPlay(this._currentframe); delete this.onEnterFrame} } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たぶんこれで行けると思います。 a_mc を動かすボタンに書くスクリプト on (release) { // カウント用変数 cnt の初期化 cnt = 0; //Cの巻き戻し _root.c_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame(); } else { // カウント用変数 cnt に 1 を加算 cnt++; // もし cnt が 2 であれば if (cnt == 2) { // a_mc を再生 _root.a_mc.play(); } delete this.onEnterFrame; } }; //Bの巻き戻し _root.b_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame(); } else { // カウント用変数 cnt に 1 を加算 cnt++; // もし cnt が 2 であれば if (cnt == 2) { // a_mc を再生 _root.a_mc.play(); } delete this.onEnterFrame; } }; } ちなみに b_mc を動かすボタンのスクリプト on (release) { // カウント用変数 cnt の初期化 cnt = 0; //Aの巻き戻し _root.a_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame(); } else { // カウント用変数 cnt に 1 を加算 cnt++; // もし cnt が 2 であれば if (cnt == 2) { // b_mc を再生 _root.b_mc.play(); } delete this.onEnterFrame; } }; //Cの巻き戻し _root.c_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame(); } else { // カウント用変数 cnt に 1 を加算 cnt++; // もし cnt が 2 であれば if (cnt == 2) { // b_mc を再生 _root.b_mc.play(); } delete this.onEnterFrame; } }; }
その他の回答 (1)
- zari514
- ベストアンサー率48% (26/54)
以下、新規ファイルでひとまず試してから応用してね。 まず_rootに30フレームのムービークリップを作って下さい。 モーショントゥイーンさせておくと分かりやすいかもよ。 それを右に2つ複製し、それぞれA・B・Cと名付けます。 A・B・Cを下に複製し、D・E・Fと名付けます。 _root上に6つのムービークリップがある事を確認して、 _rootのフレームに以下を記述。 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - M_ARY = [A, B, C]; B_ARY = [D, E, F]; for (var i = 0; i < M_ARY.length; i++) { M_ARY[i].stop(); B_ARY[i].stop(); B_ARY[i].MC = M_ARY[i]; M_ARY[i].onEnterFrame = function() { if (this.FLG != 1) { this.gotoAndStop(this._currentframe - 1); } else { this.gotoAndStop(this._currentframe + 1); } }; B_ARY[i].onRelease = function() { for (var i = 0; i < _root.M_ARY.length; i++) { _root.M_ARY[i].FLG = 0; } this.MC.FLG = 1; }; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
お礼
zari51様 その作業手順から、何やら魔法でも見ているか、詐欺にでも遭ったような気分でした(笑) 巻き戻し終了後に任意のムービークリップ再生、というのが同時になってしまいましたが、それでもActionScriptの奥深さを感じました。 今後、一生懸命勉強していきたいと思います。 ありがとうございます。
お礼
BlurFiltan様、お返事が遅くなってしまい申し訳ございません。 ご教授頂いたスクリプトで無事に作動致しました。 実は最初にお返事に気付かず、 ムービークリップを3フレームに配置 ボタンも各々キーフレームを作成し、フレーム毎にスクリプトを変える という全くスマートでは無い方法で作成して満足してました(苦笑) ActionScriptは奥が深いですね。 本当に参考になりました。 ありがとうございます。 ↓不細工な力技… //b_mcの入っているフレーム(2)でボタンAを押した場合 on (release) { //b_mcの巻き戻し _root.b_mc.onEnterFrame = function() { if (this._currentframe>=2) { this.prevFrame();} else{ delete this.onEnterFrame //a_mcの入っているフレーム(1)の再生 gotoAndPlay(1) _root.down_mc.onEnterFrame = function() { if (this._currentframe<=40){ this.gotoAndPlay(this._currentframe); delete this.onEnterFrame} } }; } }