FlashMXでウェイト処理

このQ&Aのポイント
  • 数秒間のウェイトを入れたいとき、[frame 1] start = getTimer(); limit = 2000; [frame 3] if( getTimer() > start + limit ){ gotoAndPlay( _currentFrame +1 ); }else{ gotoAndPlay( _currentFrame -1 ); } というようにぐるぐる回しているのですが、頻繁に使う処理なのでサブルーチンにしようと思います。
  • ルートのタイムライン 1フレーム目に function wait( start, limit, nowframe ){ if( getTimer() > start + limit ){ gotoAndPlay( nowframe +1 ); }else{ gotoAndPlay( nowframe -1 ); } } と書きムービークリップの中から wait( start(前のフレームで定義), 2000, _currentFrame ); 呼び出したのですが、goto先がムービークリップの中ではなくルートタイムライン上のフレームになってしまいます。
  • goto~をサブルーチン化して、呼び出し元のタイムラインに対し処理させるということは出来ないのでしょうか。
回答を見る
  • ベストアンサー

FlashMXでウェイト処理

数秒間のウェイトを入れたいとき、 [frame 1]--------------------------  start = getTimer();  limit = 2000; [frame 3]--------------------------  if( getTimer() > start + limit ){   gotoAndPlay( _currentFrame +1 );  }else{   gotoAndPlay( _currentFrame -1 );  } というようにぐるぐる回しているのですが、頻繁に使う処理なので サブルーチンにしようと思います。 ルートのタイムライン 1フレーム目に  function wait( start, limit, nowframe ){   if( getTimer() > start + limit ){    gotoAndPlay( nowframe +1 );   }else{    gotoAndPlay( nowframe -1 );   }  } と書きムービークリップの中から  wait( start(前のフレームで定義), 2000, _currentFrame ); 呼び出したのですが、goto先がムービークリップの中ではなく ルートタイムライン上のフレームになってしまいます。 よくよく考えれば当たり前です。 goto~をサブルーチン化して、呼び出し元のタイムラインに対し 処理させるということは出来ないのでしょうか。

  • syg
  • お礼率53% (7/13)

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

  • ベストアンサー
回答No.1

まず、呼び出し側では、 _root.wait( start(前のフレームで定義), 2000, _currentFrame); としなくては動かないと思います。 # 現状で動いているなら、無視して構いませんが…。 また、ルートに記述する関数は、引数を一つ増やし、  function wait( start, limit, nowframe, mcName){   if( getTimer() > start + limit ){    eval(mcName).gotoAndPlay( nowframe +1 );   }else{    eval(mcName).gotoAndPlay( nowframe -1 );   }  } とすれば、正しく動くのではないでしょうか? 呼び出し元のムービークリップを指定してやるわけです。 # 試していないので、自信はないですが。。。

syg
質問者

お礼

ありがとうございます。教えていただいた方法でうまくいきました。 また、下記のように記述してグローバル関数にしました。 _global.wait = function( start, wait, nowFrame, mcName ){ しかし階層が変わったりすると使い回せないのが難点ですね。^^; 指定したパスから現在位置を探すような命令があればいいんですが。

その他の回答 (1)

回答No.2

ムービークリップオブジェクトには、 _name, _target と言うプロパティがあります。 _nameは、そのムービークリップオブジェクトの名前(インスタンス名)を、 _targetは、そのムービークリップオブジェクトへのパスを示しています。 これらを使ってみてはいかがでしょう?

syg
質問者

お礼

あ、そうか。「_target」がありましたね。 呼び出すときに wait( start, 3000, _currentFrame, _target ); とすることでいきました。

関連するQ&A

  • 一定処理せずに待つアクションスクリプトを教えて下さい。

    こんにちは、 現在WinでFlash MXを使用してます。 getTimer関数を使用して待ち時間を作ってみたのですが動作しません。 現在作成したプログラムは ◆1フレーム目 startTime = getTimer(); timeOut = 3000; ◆2フレーム目 if( getTimer() > startTime + timeOut ){ gotoAndPlay(3); } else{ gotoAndPlay("lop"); } このようになっており、 ”3フレーム目”にジャンプしてほしいのですが、 ジャンプしません。 何故でしょうか?

    • ベストアンサー
    • Flash
  • FlashMXで「goto」の使い方。

    これってグラフィックソフトでいいのかな?ホームページ作成? それはさておき… シーン1にシンボルを1つ置き、ムービークリップにしました。ムービーを再生するため一旦「stop();」させます。 そのムービーを全て再生し終わるとシーン1のフレームラベル「main」に飛ぶようにしたいと考えています。 ムービークリップの最後に「gotoAndPlay("シーン 1", "main");」とするのですが、シーン1に戻ってくれません。(ムービークリップを繰り返し再生するだけ) どうしたら上のシーンに戻ることが出来ますか?

  • Flash MX ActionScriptのEnterFrame

    Flash 初心者です。 クリップアクションの、 onClipEvent (enterFrame) { } がいまいちよくわかりません。 フレームが1フレームだけのルートのタイムラインに、 何の動きもないムービークリップオブジェクト(これも1フレームのみ)を1つ置いたとします。 そのムービークリップに、例えば、 onClipEvent (enterFrame) { _rotation+=20; } とアクションをつけたとします。 これを再生すると、回転し続けますよね。 これはルートのタイムラインが1フレームだけでも、 それがループしていると考えると、納得できるのですが、 1フレーム目に、this.stop();を記述しても、 回転し続けます。 enterframeとはどのように解釈すればいいのですか? ルートのタイムラインが再生される度に呼び出されるということでは ないのでしょうか? よろしくお願い致します。

  • 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
  • 【AS3】ムービークリップからステージへアクセスできません

    はじめまして。FlashでAction Script3.0を勉強し始めたばかりの初心者です。 実は、AS3でどうしても不明な部分があり この度問い合わせさせていただいております。 AS2では_rootでステージにあるムービークリップにアクセスできたかと思うのですがAS3では代わりのものはあるのでしょうか。 現在ステージ上にいくつかムービークリップを置いて、 それぞれのムービークリップ最後のタイムラインに、 「root.gotoandPlay("scene1")」というように記述して、 ステージにもどり、そのフレーム名から始めたいのですが(この場合、scene1というステージ上のフレームから再生させたい) 「未定義である可能性のgotoAndPlayメソッドを静的型flash.display:DisplayObjectContainerの参照を使用して呼び出しました」というエラーになってしまいます。 外部クラスなどは使用しておらず、 ライブラリに格納してあるムービークリップをステージに配置し、 初めのムービークリップを再生したら、次のムービークリップを再生、、というふうに順々に表示させていきたいのですが・・ アドバイスをいただけると大変助かります!! よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flash判定アクションスクリプトの記述を教えてください。

    仕事の都合でFlash(Versionは8)を扱わなければいけなくなり只今勉強中兼HP製作中です。 行き詰まっているので教えてください。 現在、シーン1のタイムライン1フレーム目にいます。 ステージ上には、 ムービークリップが4つ(名前 m_A , m_B , m_C m_D)配置されています。 ボタンが5つ(名前 b_A , b_B , b_C , b_D , b_Z)配置されています。 ボタンb_Aには on (release) { with (_root.m_A) { play(); } } と記されていて、ボタンを押すとm_Aは再生されて10フレーム目でストップします。 ボタン B~D も同様にボタンを押すとムービークリップB~Dもそれぞれ再生されて10フレーム目でストップします。 ムービークリップ m_A~Dのフレーム10の中には、さらにボタン b_Xがあり、 それを押すとさらに再生されて20フレーム目までいったところで、gotoAndPlayで1フレーム目に戻りストップします。 シーン1のタイムライン1フレーム目に配置されている、ボタンb_Zを押すと、 ムービークリップ m_A~Dのタイムライン1フレーム目にいるものはそのままで、 そして、10フレーム目でストップしていたものは、 再生されて20フレーム目までいったところで、gotoAndPlayで1フレーム目に戻りストップになったところで、 (m_A~Dが全てタイムライン1フレーム目に行ったところで、) シーン1のタイムライン1フレーム目から再生されて、 タイムライン10フレーム目でストップといった命令を書きたいのですが、 どうやって指定してやればよいでしょうか? 多分、if文等を使用するんでしょうが、さっぱりわかりません。 詳しく教えていただければ、幸いでございます。

  • FlashMX2004で、メインタイムラインで作成したモーショントゥイーンをシンボルにするやりかた

    Flashのメインタイムラインで作成したグラフィック(ムービークリップで作った蝶を、モーションガイドに沿っ舞っているシーン。20フレームで作成)をシンボルにするにはどうすればいいのでしょうか? 全てを選択して、右クリックのシンボルに変換をしても、モーションガイドで作成した線しか選択されなかったりします。 ■メインタイムライン上↓ レイヤー1に、蝶をモーショントゥイーンで20フレーム移動するシーンを作成。(※蝶は別ムービークリップで、2フレームでパタパタと羽ばたくシーンを作成済み) レイヤー2に、モーションガイドを作成。(20フレーム) この全てを選択して、ムービークリップ(シンボル)にしたいのですが、どうすればいいでしょうか? 教えてください。よろしくお願いします。 FlashMX2004 WindowsXP

  • FLASHのActionScriptについて

    すみません。どなたか教えてください。  風景の画像が時間が来たら、次の風景が移る様にしたいのです。 静止している様に見える"2"のフレームを2フレームにして、2フレーム目に gotoAndPlay("シーン 1", "02") を入れてループさせています。120秒後に"03"フレームに移動させるよう、隠しオブジェクトに以下のスクリプトを記入しました。 onClipEvent (load) { beforeTime = getTimer(); n = 0; } onClipEvent (enterFrame) { nowTime = getTimer(); n = n+nowTime-beforeTime; beforeTime = nowTime; if (n>120000) { gotoAndPlay("シーン 1", "03"); n = 0; } } しかし、初めのgotoが無視されたように、書き出してしまいます。ここを Stop() にするとずーととまったままです。何か方法はないのでしょうか?

  • Flash タイムライン上のMCへの移動

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

  • flash actionscriptとタイムライン

    flash CS4 Xpでの開発環境です。 メインのタイムラインとムービークリップ自身が持つタイムラインの二つのラインがあります。メインのタイムラインは5fで構成されており、1Fずつキーフレームが設置してあります。 メインのタイムライン上にアクションスクリプト 1F目 var flag=0; stop(); if(flag=1){gotoAndPlay(2)} と書かれています。 ムービークリップはメインのタイムライン上の1F目に設置してあり,ムービークリップのタイムラインは60Fで構成されていて、60F目にactionscript flag=1; と書いています。 ムービークリップの動きがすべて終わってから、メインのタイムラインを2F目に進めたいのですが、現状ではすぐに2F目にうつってしまうような感じになってしまっています。 どこがいけないのでしょうか? もし知っている方がいましたらご教授いただきたいです。 よろしくお願いします。