• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:flashを一定時間停止させる方法について)

flashを一定時間停止させる方法について

このQ&Aのポイント
  • flashで画像ボタンをスクロールさせて表示するメニューボタンを作ろうとしています。
  • 画像ボタンは1つ移動するごとに3秒停止し、3秒経つと横に移動し、次の画像ボタンが現れ、また3秒停止する、といった動きを繰り返すようにしました。
  • しかし、スクロールを進めるためのボタンを押すと、一時停止の動作がおかしくなってしまいます。どのように修正すれば正常に動かすことができるでしょうか?

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

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

おそらく ボタンでも play(); を実行してるのだと思いますが, ボタンで play(); を実行した場合 3秒が経つ前に次の setInterval がセットされてしまって グチャグチャになるのだと思います。 stopID にはID番号が入るのですが その番号は順次繰り上がりで変動します。 setInterval の管理は結構大変です(補足↓)。 グチャグチャにならないようにするには ボタンクリック時に,前の setInterval をクリアする方法も考えられますが, ボタン以外にも次の setInterval がセットされてしまうこともあり得るので setInterval をする前に,前の setInterval をクリアしておいた方が良い(無難)と思います。 //---------------------------- stop(); //前の setInterval をクリア clearInterval(stopID); stopID = setInterval(stopFRAME,3000); function stopFRAME() { clearInterval(stopID); play(); } //----------------------------     === 補足 ============ 「setInterval の管理は大変だ」という話です。 新規ドキュメント作成でフレーム1にコピペし, 「制御」→「ムービープレビュー」してみる例です↓。 //------------------------------------ myID = setInterval(traceID, 3000); trace(myID); //→「1」が出力される myID = setInterval(traceID, 3000); trace(myID); //→「2」が出力される clearInterval(myID); trace(myID); //→「2」が出力される function traceID() { trace(myID); //→3秒ごとに「2」が出力され続ける clearInterval(myID); //←こんなの効かない! } //------------------------------------ 上記スクリプトでは setInterval を2回連続でセットしています。 2回セットしたうち clearInterval(myID); でクリアされるのは ID番号が「2」の方(2回目)の setInterval だけです。 ID番号が「1」の方の setInterval はクリアされないので 3秒ごとに「2」が出力され続けます。 ここでもし, 3秒ごとに「2」が出力され続けるのを止めさせたいとするなら, つまり setInterval を完全にクリアしたいとするなら, スクリプトを次のような感じにする必要があります。 //------------------------------------ myID = setInterval(traceID, 3000); trace(myID); //→「1」が出力される myID = setInterval(traceID, 3000); trace(myID); //→「2」が出力される clearInterval(myID); trace(myID); //→「2」が出力される //↓最初の方の setInterval をクリア clearInterval(1); function traceID() { trace(myID); //→何も出力されない } //------------------------------------ 上の場合は わかっていて(わざと意識して)このようにしているので 私も setInterval をクリアする方法はわかります。 しかし わかっていなくて(想定外の状況で)上のようになってしまったら setInterval をクリアする方法はわからないかもしれません。 (またグチャグチャになることすら気付かないこともあり得ます。) setInterval の管理は大変です。 一度グチャグチャになったら終わりなので グチャグチャになる前にクリアしておく方が無難です。 それでも何かの都合で グチャグチャになってしまった場合の対処法↓。 //------------------------------------ myID = setInterval(traceID, 3000); trace(myID); //→「1」が出力される myID = setInterval(traceID, 3000); trace(myID); //→「2」が出力される myID = setInterval(traceID, 3000); trace(myID); //→「3」が出力される //setInterval強制クリア if (myID != undefined) { for (i=1; i<=myID; i++) { clearInterval(i); } } function traceID() { trace(myID); //→何も出力されない } //------------------------------------

client_user
質問者

お礼

ご返答と分かりやすい捕捉説明をありがとうございます。 setIntervalをクリアしたところ、正常に動いてくれるようになりました。 setIntervalの設定値が残ることや、複数設定した時の動きを 踏まえていなかったので、今後のflash作成時に役立てていこうと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A