• ベストアンサー

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} } }

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

たぶんこれで行けると思います。 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; } }; }

i-motto
質問者

お礼

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}  }  };  } }

その他の回答 (1)

  • zari514
  • ベストアンサー率48% (26/54)
回答No.2

以下、新規ファイルでひとまず試してから応用してね。 まず_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; }; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

i-motto
質問者

お礼

zari51様 その作業手順から、何やら魔法でも見ているか、詐欺にでも遭ったような気分でした(笑) 巻き戻し終了後に任意のムービークリップ再生、というのが同時になってしまいましたが、それでもActionScriptの奥深さを感じました。 今後、一生懸命勉強していきたいと思います。 ありがとうございます。

関連するQ&A