• ベストアンサー

mcのx座標が50以上になったら次フレーム

タイトルどおり、 mcのx座標が50以上になったら次フレーム という処理をしたく、 mcに次のアクションスクリプトを記述しました。 onClipEvent(enterFrame){ this._x += 10; } onClipEvent(load){ if(this._x >= 50){ nextFrame(); } } しかし何故か次のフレームに行ってくれません。 どこか間違っているのでしょうか。。。 nextFrame();をgotoAndPlay(2);にしても駄目でした。

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

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

onClipEvent(load){} は, そのムービークリップがロード(表示)されたときに1回だけ実行されます。 ですからまず そのムービークリップがどこかに出没した瞬間に, そのムービークリップの x座標 が 50 以上であれば nextFrame(); で, "そのムービークリップ内のタイムライン" 再生が 次のフレームに移ってストップします。 そのムービークリップがどこかに出没した瞬間に, そのムービークリップの x座標 が 50 未満であれば そのままの状態です。 そのままの状態というのは "ムービークリップ内のタイムライン" が再生状態であれば 再生されっぱなし, "ムービークリップ内のタイムライン" が停止状態であれば そのフレームで停止しっぱなし ということです。 onClipEvent(enterFrame){} は 1フレーム進む時間ごとに毎回実行されます。 12fps 設定のムービーだと,1秒間に 12回 ほど実行されます。 したがって,  mcのx座標が50以上になったら  その "ムービークリップ内のタイムライン" を  次フレームへ進める ということをしたいのであれば, 1フレーム進む時間ごとに毎回 50 以上か未満かを判定させなければなりません。 したがって, ここだけを単純に鵜呑みにしてスクリプトを書き換えるなら, ------------------------------------------ // 1フレーム進む時間ごとに毎回実行 onClipEvent(enterFrame){ this._x += 10; // x座標が 50 以上になれば if (this._x>=50) { // このムービークリップ内を次のフレームに進めて停止 nextFrame(); } } ------------------------------------------ と書く必要があります。 ( onClipEvent(load){} は不要なので削除 ) --- --- --- --- --- --- 単純に鵜呑みにしてスクリプトを書き換えましたが 本当は鵜呑みにしていいかどうかわからない部分があります。 nextFrame(); は ムービークリップ自体に書いているわけですから, その "ムービークリップ内のタイムライン" が次のフレームに進みますよ。 それで良いのかどうかは私にはわかりません。 あと ムービークリップ のx座標が 50 以上になれば 1フレーム進む時間ごとに毎回 その "ムービークリップ内のタイムライン" が次のフレームに "進み続け" ますよ。 それで良いものかどうかも私にはわかりません。 もし "進み続け" させたくない場合は, ---------------------------------------------------------------- // このムービークリップが現れたときに実行 onClipEvent (load) { // 適当にフラグ(旗)となる変数を作る(初期値false) flag = false; } // 1フレーム進む時間ごとに毎回実行 onClipEvent (enterFrame) { this._x += 10; // x座標が 50 以上で なおかつ フラグが false のとき if (this._x>=50 && !flag) { // このムービークリップ内を次のフレームに進めて停止 nextFrame(); // フラグを true にする flag = true; } } ---------------------------------------------------------------- のように一工夫する必要があります。

hukazuo
質問者

お礼

ありがとうございました。 大変、詳しく教えていただけたので理解することができました^^

関連するQ&A

専門家に質問してみよう