ActionScript3.0のgotoAndPlay(currentFrame-1)の遅さの原因は?

このQ&Aのポイント
  • ActionScript3.0のgotoAndPlay(currentFrame-1)の実行速度が遅い問題について調べました。
  • ActionScript2.0では問題なく使えるのに対して、ActionScript3.0では実行速度が低下してしまう現象が起きています。
  • この問題は3.0の仕様変更によるものなのか、他の原因があるのか、原因を特定するための情報が必要です。
回答を見る
  • ベストアンサー

ActionScript3.0 gotoAndPlay(currentFrame-1)が遅いのは何故?

フレームを2つ用意し、2フレーム目に gotoAndPlay(currentFrame-1) と書くことで 1フレーム目をループさせる手法についてです。 ActionScript2.0では問題なく使えるのですが ActionScript3.0だと、1フレーム目が実行される速度が2.0の半分になってしまいました。 fpsを1にすると、1フレーム目に書いたtrace文が2秒に1回しか表示されません。 通常のフレーム移動はfps通りの速度が出ています。 gotoAndPlay(currentFrame-1) を gotoAndPlay(1) と書いても同じです。 これは3.0の仕様変更によるものなのでしょうか? 原因のわかる方おられましたら、ご教授お願いします。 WindowsXP(32ビット) FlashCS3

  • bbcd
  • お礼率68% (207/302)
  • Flash
  • 回答数1
  • ありがとう数6

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

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

Flash Player 9 ,または Flash Player 9 用 SWF のバグのような気がします。 フレームレート を 10fps にします。 フレーム1 に trace("time1=" + getTimer()); と書き フレーム2 に trace("time2=" + getTimer()); gotoAndPlay(currentFrame-1); と書き CS4 で Flash Player 9 用 SWF 設定で 「制御」→「ムービープレビュー」すると,次のような結果になりました。 ------------- time1=6 time2=76 time1=76 time2=206 time1=206 time2=406 time1=406 time2=606 time1=606 time2=806 time1=806 time2=1006  …   … ------------- gotoAndPlay(currentFrame-1); 自体は正常に動作するのですが, その後,フレーム1 でもたついているのがわかります。 CS4 で Flash Player 10 用 SWF 設定で 「制御」→「ムービープレビュー」すると,次のような結果になりました。 ------------- time1=6 time2=57 time1=57 time2=139 time1=139 time2=205 time1=205 time2=305 time1=305 time2=405 time1=405 time2=505 time1=505 time2=605 time1=605 time2=705 time1=705 ------------ 最初はどうしても不安定になりますが, 基本的にちゃんと正常に動作してますね。 フレーム2 のスクリプトを trace("time2=" + getTimer()); gotoAndPlay(_currentFrame-1); のように変え CS4 で ActionScript 2.0 Flash Player 8 用 SWF 設定で 「制御」→「ムービープレビュー」すると,次のような結果になりました。 ------------ time1=24 time2=98 time1=98 time2=122 time1=122 time2=219 time1=219 time2=319 time1=319 time2=419 time1=419 time2=519 time1=519 time2=619 time1=619 time2=719 time1=719 ------------ これも最初はどうしても不安定になりますが, 基本的にちゃんと正常に動作してますね。 フレーム移動後の動作をフレーム移動前に命令できないなど, (gotoAndStop(3) を した後に フレーム3 から出てくる ムービークリップ を動作させられない など) Flash Player 9 (用SWF)には妙なバグのようなものがありますよ。 多くの方が ActionScript 3.0 の仕様だと勘違いされているようですが, 実は Flash Player 9 (用SWF) の不具合, または, Flash Player 9 の仕様のように思います。

bbcd
質問者

お礼

検証して頂いて助かります。どうやらバグのようですね。 こんな基本的な動作にバグがあるとは……どうやって回避したものか悩ましいです。 CS4にバーションアップか、AS2.0にするかなどいろいろと検討してみます。 ご回答ありがとうございました。

関連するQ&A

  • gotoAndPlayされないです

    はじめてFlashを作ります。 "ATTACK1"と"ATTACK2"のフレームを0.2秒の間隔で10回交互に表示したあと、 "ATTACK3"と"ATTACK4"のフレームをenterが押されるまで交互に表示する というプログラムを作りたいのですが、 "ATTACK1"と"ATTACK2"のフレームを交互にずっと表示されるだけで、 ATTACK3へ移動しません。 "ATTACK1"というラベルのフレームに以下のように書きました。 ActionScript2.0でやっています。 どこが悪いのか教えてください。お願いします。 ATTACK1フレームのActionscript var timeCount = true; var endTime = getTimer()+0.2*1000; stop(); onEnterFrame = function() { if( timeCount ){ time = Math.ceil((endTime-getTimer())/1000); if( time <= 0 ){ timeCount = false; if( count >= 10 ){ gotoAndPlay("ATTACK3"); count=0; delete this.onEnterFrame(); } gotoAndPlay("ATTACK2"); count=count+1; delete this.onEnterFrame(); } } }; ATTACK2フレームのAcctionscript var timeCount = true; var endTime = getTimer()+0.2*1000; stop(); onEnterFrame = function() { if( timeCount ){ time = Math.ceil((endTime-getTimer())/1000); if( time <= 0 ){ timeCount = false; gotoAndPlay("ATTACK1"); delete this.onEnterFrame(); } } };

    • ベストアンサー
    • Flash
  • 「ActionScriptでディレイみたいな制御」に関して

    こんにちは、初心者ですがお世話になりますm(__)m 使っているのは、Flash MXです(Ver6)主に書籍見ながら触っているところです。 【内容】 2フレーム目から、30フレーム目までモーショントゥイーンをいれてます。 30フレーム目にActionScriptにより、gotoAndPlay(2); で2フレーム目に戻して繰り返してます。 これを、30フレーム目に到達した際、10秒経過してからgotoAndPlay(2) で 移動させたいのですが、なかなかうまくいきません…。 ヒントみたいなので結構ですので、宜しければ返答のほうをお願い致します。

    • ベストアンサー
    • Flash
  • 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() にするとずーととまったままです。何か方法はないのでしょうか?

  • ループ再生させたい

    単純に、最後のフレームに来たらまた最初のフレームに戻って えんえんとループさせたいのです。 最後のフレームにアクションで「gotoAndPlay(1);」でいいと思っていたのですがループしません。 バージョンはCS3です。 それと、CS3になってからActionScript3.0になったらしいですが、どう変わったのでしょう? 新規書類で2.0にするか3.0にするか選べるのですがどちらにしたらいいのかも分かりません。 アクションはせいぜいgotoAndPlayやGetURLぐらいしか使えないのですがその場合でも3.0の方がいいのでしょうか?

  • ロードしたムービーの早送り

    いつもお世話になっております。 OSがWinXPでFlashMXでプログラムを作成しております。 メインムービーにサブムービーをロードしています。 サブムービーの制御を考えていまして、コマ送りのようなものは出来ましたが、 早送りが出来ずに困っております。 Googleなどで検索をかけたとき、下記のようなプログラムを見つけました。が上手く動作しませんでした。 on (release) { load.gotoAndPlay(load._currentframe+(2*fps)); } currentframe+(2));にすると現在のフレームから2フレーム飛ばすことは出来ますが、都度クリックしなければなりません。 早送りのような機能はないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHでループ再生を制限するAS

    Flashで音楽に合わせループ再生するアニメーションを作っています。 Web等で調べたActionScriptを使い音楽に合わせた回数で止まるように入力したつもりですが、止まらず、またループ再生してしまいます。 どのような記述をすればよろしいのでしょうか? 複数のレイヤーがあるので、1フレーム目に var loop_cntA:Number = 0; とloop_cntAと変数を宣言して、 最後のフレームに loop_cntA = Number(loop_cntA)+1; if (Number(loop_cntA)<25) { gotoAndPlay(1); } else { stop(); } と入力し24回目までループするように設定したつもりです。 しかし、止まってくれず何度もループしてしまいます。 どのように記述するのが正しいのでしょうか? ご指導お願い致します。

  • 一定時間が経過した後のフレーム移動について

    Flash初心者です。うまく質問したいことが伝わるか心配ですが、どうぞ宜しくお願いします。 タブメニュー型のムービーを作成していまして、10秒経過すると次のタブが開き、 また10秒すると次のタブが開く…。このループです。 タブの数は4つ。1フレームごとにそれぞれのタブが開いているように画像で見せておいて(計4フレームを使用)、 スクリプトで10秒の間隔をおき、次のフレームに移動させる仕組みになっています。 タブにはクリックできるようにボタンが仕込んであり、クリックするとムービーの流れ(再生されている順)に関係なく、 そのタブに移動します(2つ目のタブなら2フレーム目を再生)。 (タブの部分のテキスト、タブが開いたときに表示されるバナー画像は外部読み込みになっています。 ただ、この外部読み込みに関しては質問の内容に影響しないと思いますので詳しくは説明しないでおきます。) スクリプトは下記のとおりです。(注:教えて!gooにあったものを使わせていただきました。) ※1フレーム目 --------------------------------------------------------------------- this.stop(); timerID = setInterval(startMovie, 10000); function startMovie() { gotoAndPlay(2); clearInterval(timerID); } ※2フレーム目 --------------------------------------------------------------------- this.stop(); timerID2 = setInterval(startMovie2, 10000); function startMovie2() { gotoAndPlay(3); clearInterval(timerID2); } ※3フレーム目 --------------------------------------------------------------------- this.stop(); timerID3 = setInterval(startMovie3, 10000); function startMovie3() { gotoAndPlay(4); clearInterval(timerID3); } ※4フレーム目 --------------------------------------------------------------------- this.stop(); timerID4 = setInterval(startMovie4, 10000); function startMovie4() { gotoAndPlay(1); clearInterval(timerID4); } これでちゃんと10秒経過すると次のフレームに移動し、それがループされるのですが 問題は、途中で順に再生されているタブと違うタブをクリックしたときに起こります。 一度、その再生順がクリックすることによって変わってしまうと、元々の『10秒後に次のフレームへの移動』の動きと、 クリックされたタブから『10秒後に次のフレームへの移動』の動きが重複しているようなんです。 ちゃんと確認できたわけではありませんが、複数回これを繰り返すと4つのタブがかなりの速度でパッパッパと遷移し、 まともに見ることすらできないものになってしまいます。 解決したいのは、クリックしたタブ(移動したフレーム)から新たに10秒がカウントされ、10秒後には次のフレームに移動し 10秒経過する前に他のタブをクリックしたときでも、そのタブ(フレーム)に移動してからまた新たに10秒がカウントされる…。 このようにするにはどうしたらいいでしょうか? どうぞご教示ください。

  • 【質問】ムービーAをクリック→A再生後Bに移動

    初めまして mojacと申します。 最近flash basic 8を使って actionscriptの勉強を始めたのですが、 手始めに 【ボールがずっと跳ね続けるムービー(シーン1=page1)を作成し、】 gotoAndPlay(1) ↓ 【クリックすると転がる(シーン2=page2)】 on(release){ gotoAndPlay("page2",1); } というムービーを作成しました。 クリックすると確かに転がる(シーン2に移動する)んですが、 ボールが跳ねている途中にクリックすると、 次のフレームでは地面に転がっているフレームに移動するので すごく不自然に見えます そこで、 ボールはループして跳ねる→着地を繰り返している ↓ クリックするとシーン1の最後まで再生後(着地後) ↓ シーン2に移動(転がる) という流れのスクリプトを組みたいんですが、 詳しい方、どなたかご教示頂けないでしょうか。 極めて分かりづらい説明ですみません... また、足りない部分がありましたら、 分かる範囲で説明させて頂きます。 宜しくお願いします。

  • 動画ファイルについての質問です。

    動画ファイルについて教えていただきたいのですが、 (1)WMV フレーム幅1280 フレーム高720 データ速度7000kbps 総ビットレート7187kbps フレーム率59フレーム/秒 という動画ファイルと (2)MP4 フレーム幅1920 フレーム高1080 データ速度4000kbps 総ビットレート4064kbps フレーム率59フレーム/秒 という動画があった場合高画質なのは(1)か(2)かどちらでしょうか? 宜しくお願いいたします。

  • 複数のクリックボタンにより再生と停止場所を指定する方法

    複数のボタンを用意し、クリックするボタンにより異なるフレーム数で停止たいと思っております。 停止したいフレームごとにstop();を入れると、そこで毎回止まってしまうのでボタン毎に停止場所を指定しようと、以下のように試してみましたが、出来ませんでした。 停止場所をラベルでも指定してみましたが、出来ませんでした。 stop(); _root.next1.onRelease = function() { gotoAndPlay(5); this.stop(10); } _root.next2.onRelease = function() { gotoAndPlay(5); this.stop(20); } どなたかお考えのあるかたご教授いただけますと幸いです。 当方 Flash8 ActionScript2.0 を使用しています。

専門家に質問してみよう