• 締切済み

変数のフレーム間の移動

ムービークリップ内に作ってある変数をフレームを移動してでも呼び出して使えるようにしたいのですが _root.ムービクリップインスタンス.変数名 だとできないです。 どうすればできるのでしょうか? 教えてください

  • nicks
  • お礼率65% (13/20)
  • Flash
  • 回答数2
  • ありがとう数2

みんなの回答

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

あるはずの変数が参照できない理由には、いくつか原因が考えられます。 まず1つは、変数を呼び出そうとしたフレームで、ムービークリップが既にステージから消えてしまっている場合です。 例えば clip というムービークリップが、フレーム1~5までステージに存在しているとします。 clip が持っている変数は、フレーム1~5までの間ならば、メインのタイムラインやフレーム1~5に存在する他のインスタンスからでも参照可能です。 しかし、フレーム6以降は clip はステージから消えます。この時、clip が持っていた変数も一緒に削除されてなくなってしまいます。 _root はムービーそのものを指します。ムービーが再生されている間は消滅することがないので、_root に定義した変数や関数は、フレームやシーンを移動しても消えません。 clip がステージから消えた後(この例ではフレーム6以降)も clip が持っていた情報を利用したい時は、その情報を _root に用意した変数にコピーし、事前に保存しておくといった方法があります。 2番目の理由としては、変数を参照しようとしたタイミングと、ムービークリップの中で変数が定義されるタイミングが合わない場合です。 例えば、先の clip が 10 フレームでできたムービークリップで、clip のフレーム 10 で変数 a が定義されるとします。 メインのタイムラインのフレーム1で a を参照するスクリプトを書いたとすると、このスクリプトが実行される時点では clip のフレーム1が再生されており、この変数はまだ定義されていません。 この場合はどうにもなりませんので、a をもう少し早いフレームで定義するか、呼び出すタイミングを遅らせる、あるいは、他のフレーム間をループして a の値を監視するスクリプトを何度も繰り返し、undefined である間はループ・ undefined でなくなった時先に進む、といった方法で対処してください。 なお、ムービークリップの load イベントを利用して定義した変数は、処理の速度や順番の問題で、ムービークリップがステージに登場するフレームでは利用できない(未定義扱いになる)場合があります。 この場合は、変数を呼び出すフレームを1つずらすことで呼び出せるようになります。 同じシンボルから作られたインスタンスでも、キーフレームが変わると別のものになります。 例えば、フレーム1~5までは clip1 、フレーム6~10までは clip2 というインスタンスが、ステージに存在しているとします。この2つは同じムービークリップシンボルから作られたインスタンスです。 同じシンボルから作られたインスタンス同士であっても、clip1 の持っている変数と clip2 が持っている変数は別のものです。 clip1 が持っていた変数は、先述の通り、clip1 がステージからなくなると同時に消えてしまいますので、フレーム6以降では利用できません。 たとえ、フレーム6から登場するムービークリップに同じく clip1 という名前を付けたとしても、これはフレーム1~5まで存在していた clip1 とは別のものです。前の変数等も初期化あるいは上書きされ、値が変わっています。 このような場合も、先の例と同様に、必要な値を _root の変数に予め保存しておくことで、いつでも参照できるようになります。 それから、よくあるパターンが、ターゲットパスの誤りです。 何かのムービークリップの入れ子になっているムービークリップは、  _root.親のインスタンス名.自分のインスタンス名.変数名 = ・・・ となります。 大文字・小文字・名前の間違いなど、些細な間違いがないか、ご確認ください。 ムービークリップのターゲットパスが分からなければ、自動で挿入する機能もあります。 Flash MX 以降をお使いであれば、「アクション」パネルの上部に、いくつかアイコンが並んでいるかと思います。中央のアイコンが、ターゲットパスを挿入する機能です。リストから対象を選ぶだけで、ターゲットパスが挿入されます。 大体思いつく原因はこんなところですが、該当する点・思い当たる点がありませんでしょうか。

  • pawaspa
  • ベストアンサー率71% (5/7)
回答No.1

一番手っ取り早いのが、_global変数を使うのが早いと思います。(_global変数はswfファイル内すべてのステージ・ムービークリップで有効) ただ、注意しなければならないのは _global.vx と vx とは違う変数なのですべて書き直すことが必要です。

関連するQ&A

  • ムービークリップ内の変数について

    ムービークリップ内で扱った変数をルートで取り扱う時は _root.ムービークリップインスタンス名.変数名 このような形で取り扱うのでしょうか?。 また、ルートの1フレーム目のフレームアクションで変数を定義していた場合は、単に変数名だけで取り扱えるのでしょうか?。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • AS3:ルートの変数とムービークリップ内の変数について

    AS3:ルートの変数とムービークリップ内の変数について ルートのタイムラインで設定した変数var RootVarがあるとして、これをあるムービークリップMCからMovieClip(root).RootVarで読み取って、MC内で何か処理をしたときMovieClip(root).RootVar++;とやってもルートのRootVarの値は変わりません。 例えば、 ■ルートのタイムライン1フレームに記述 var RootVar:uint; if(RootVar>=3){ trace("できた!!"); } ■ステージにあるムービークリップMCのタイムライン1フレームに記述 MovieClip(root).RootVar=0; var AddTimer:Timer = new Timer(1000,3); AddTimer.addEventListener(TimerEvent.TIMER,AddNum); AddTimer.start(); function AddNum(eventObject:TimerEvent):void { MovieClip(root).RootVar++; } ルートからムービークリップ、ムービークリップからルートへ変数に値を渡したり受け取ったりはできなのでしょうか? 変数の扱い方が問題なのでしょうか?よろしくお願いします。 環境:AS3、Flash CS4

    • ベストアンサー
    • Flash
  • ActionScript3.0フレーム移動について

    お世話になります。 Flash ActionScript3.0で、ボタンをクリックしたら、 階層違いのシーンに移動するという 単純なところでつまずいています。 一番上の階層には、 1フレーム目 フレームラベル "a" 2フレーム目 フレームラベル "b" として、それぞれ this.stop();を書いてあります。 "a""b"には、それぞれムービークリップが配置してあって、 今やりたいことは、"a"に配置してあるムービークリップの 2つ下(中?)の階層にあるボタンをクリックしたら、一番上の階層の"b"に移動して、 "b"に配置してあるムービークリップを表示するようにしたいのです。 "a"のムービークリップのボタンのあるフレームには、 this.stop(); button01.addEventListener(MouseEvent.CLICK,jumpB); function jumpB(event:MouseEvent):void { MovieClip(parent.parent).gotoAndStop("b"); } と書いてみましたが、 [TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。] と怒られます。 試しに MovieClip(stage).gotoAndStop("b"); とか、"b"に配置してあるムービークリップにインスタンス名"b_mc"を与えて MovieClip(parent.parent).b_mc.play(); などと苦し紛れにやってみましたが、すべて同じように怒られます。 どのようにすれば、下の階層から一番上の階層の別フレームに 移動することができますでしょうか? よろしくお願い致します。

  • AS3リンケージ設定したムービークリップの中で、フレーム移動がしたいです。

    初心者です。 AS3で、 リンケージ設定したムービークリップを addChildで呼び出し、 呼び出したムービークリップの中の、 指定したフレームに移動するにはどうしたら宜しいでしょうか。 ステージに配置した場合、インスタンス名を付けて インスタンス名.gotoAndPlay("フレームラベル"); で移動しますが、 リンケージ設定したムービークリップの場合はインスタンス名の代わりに リンケージ名で呼び出せないのですか。

    • ベストアンサー
    • Flash
  • 【ActionScript】ムービークリップ間の変数の受け渡しのやり方は?

    ムービークリップ間の変数の受け渡しがいまいちわかりません。 例えば、 ・_root.mc1 及び、 ・_root.mc1.mc2 というインスタンスがあった場合、 _root.mc1.mc2 のフレームに a = 100; と書き、 _root.mc1 のフレームに trace(_root.mc1.mc2.a); と書いても「undifined」と出るだけです。 (上層の値を下層で受けることはできるんですが、この例のように下層→上層の受け渡しはできないのです。) どうすればインスタンス間の変数の受け渡しができるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • flashでムービークリップ後のフレーム移動

    FLASH初心者です。 ムービークリップでムービーを作ったのですが、シーン1に配置するとなぜかうまく動いてくれません。 何が悪いのか検討がつかない。 1フレームに入れたのですが、ちゃんとアクションで stop入れているし・・・。 2フレーム以降、色々ムービーを作っています。 新規作成で新しいflashにそのムービークリップを配置したらなぜかちゃんと再生してくれるのです。 原因が全く分からなくて困っています。 あと、そのムービークリックが一度終了した次点自動的に次のフレーム(2)へ移動してムービーを再生して欲しいのですが、どうすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • nextFrameで最後のフレームの後先頭に戻る

    FLASH8 AS2.0 先ほど質問を自己解決しながら、 すぐに壁に当たってしまいました; 度々申し訳ありません。 現在フォトギャラリーを作製していまして、 以下のASでムービークリップ内のフレーム移動することが出来ました。 on (release) { _root.main.nextFrame(); } 例えばムービクリップ内の10フレーム全てnextFrameで移動した後、 もう一度ボタンをクリックするとムービークリップ内の先頭(1フレーム目)に 戻るにはどうしたらよいのでしょうか。 また、同様にprevFrameを用いて1フレーム目まで移動し、 もう一度押すと10フレーム目に移動できるようにするにはどうしたらよいでしょうか。 どなたか分かる方教えて頂けないでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 変数が渡らない

    選択するための3つのボタンを作成し、それぞれ変数ansに値を格納しました。下記がそのActionScriptの例です。 ------------------------------- on(release){ ans=1; _root.nextFrame(); } ------------------------------- ボタンを押した後、別のレイヤーのフレームからMCを読み込みます。 しかし、ボタン内で格納した変数が読み込まれずundefined(未定義)となってしまいます。if文で分岐したいのですが出来ずに困っています。 ボタンをクリックすることで変数に格納した値を、ムービークリップのイベント内で読み込むことは可能でしょうか?

    • ベストアンサー
    • Flash
  • actionscript 2.0 配列型変数をグローバル変数として扱いたい。

    action script2.0で ある変数を、共有しようと、ムービークリップに _global.hoge = _name(ムービーのインスタンス名); というような記述をしました。 すると、たしかにほかのどのムービークリップでも hogeという値は取り出すことができました。 ところが、インスタンスはひとつではなく複数あるため、 _global.hoge = _nameが記述されているムービークリップがいくつもあると、 次々上書きされ、結局hogeは、最後に読み込んだ _nameの値が入ってしまうという現象が起きたのです。 そこで _global.hoge[_name] = _name; というような、変数名がかぶらぬよう配列に変更してみました。 ところが、また問題が発生しました。 なぜか、配列だと頭に_globalとついていても グローバル変数として扱ってくれず、 ほかの場所で hoge[1] 等と記述しても全く値が取り出せないのです。 また、同ムービークリップ内ではちゃんと取り出せました。 どうすれば、配列変数をグローバル変数として 扱うことができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash タイムライン上のMCへの移動

    おたずねします。 タイムラインの5フレームにあるムービクリップAを再生後、 タイムラインの2フレームにあるムービクリップBの 特定のフレームへ移動したいのですが、 パスの指定がうまいきません。 2フレームへの移動は _root.gotoAndPlay("2フレームのラベル名")で 移動できますが、そこに配置されたムービークリップの指定は どうすればいいのでしょうか。 _parentやthisを使用した 絶対パスや相対パスを調べましたが、どうもこの指定は 同フレーム上にある場合の指定のようなのかうまくいきませんでした。 それともこのような移動はできないのでしょうか。 教えていただけると大変助かります。 どうぞよろしくお願いいたします。

専門家に質問してみよう