- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FlashMXでウェイト処理)
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~をサブルーチン化して、呼び出し元のタイムラインに対し処理させるということは出来ないのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、呼び出し側では、 _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 ); } } とすれば、正しく動くのではないでしょうか? 呼び出し元のムービークリップを指定してやるわけです。 # 試していないので、自信はないですが。。。
その他の回答 (1)
- mmmPICOmmm
- ベストアンサー率68% (11/16)
回答No.2
ムービークリップオブジェクトには、 _name, _target と言うプロパティがあります。 _nameは、そのムービークリップオブジェクトの名前(インスタンス名)を、 _targetは、そのムービークリップオブジェクトへのパスを示しています。 これらを使ってみてはいかがでしょう?
質問者
お礼
あ、そうか。「_target」がありましたね。 呼び出すときに wait( start, 3000, _currentFrame, _target ); とすることでいきました。
お礼
ありがとうございます。教えていただいた方法でうまくいきました。 また、下記のように記述してグローバル関数にしました。 _global.wait = function( start, wait, nowFrame, mcName ){ しかし階層が変わったりすると使い回せないのが難点ですね。^^; 指定したパスから現在位置を探すような命令があればいいんですが。