• 締切済み

指定秒数でアクションを起こすには

はじめまして。Flashが大の苦手なのですが、どうしてもやらねばならない状況でヒーヒー言っております。 例えばアナログタイマー(時計型)で、カウント10秒ごとにアラートを鳴らし、60秒経過する(時計を針が一周する)と停止する、というようなものを作るのは、どういった方法がいいのでしょうか? よろしくお願いします。

みんなの回答

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

お使いの Flash のバージョンが書かれていませんが、とりあえず Flash MX 以降( MX / MX 2004 / Flash 8 )として話を進めます。 Flash MX からは setInterval という、一定間隔で関数を呼び出してくれるアクションが使えるようになりました。 今回はこれを使った例をご紹介します。 まず、アナログ時計の秒針の絵を描き、ムービークリップに変換してください。 ステージ上の絵を変換する時に、中心点を選択することができます。 今回は、下端・中央を選択してください。 スクリプトでムービークリップを変形する時は、ここで選択した点(インスタンスの中心点)を基点に変形が行われます。 アナログ時計の針は、針の下端を中心にして回っています。 このムービークリップの中心点も時計の針と同じ位置(針の下端・中央)を中心点に定めると、時計と同様に回転させることができます。 1分間は 60 秒で円1周は 360°ですから、秒針は 360 ÷ 60 = 6 で1秒あたり 6 °ずつ傾いていきます。 このムービークリップも、秒数に合わせて 6 °ずつ、スクリプトで回転させます。 setInterval は、関数を登録しておくと、指定の時間毎にその関数を呼び出してくれるアクションです。 setInterval で作ったタイマーは、clearInterval というアクションで削除できます。 つまり、setIntrtval により一定時間ごとに呼び出される関数では  ・秒数を数え、10 秒ごとに音を鳴らす  ・ 60 秒経過したら、clearInterval でタイマーを削除  ・秒針のムービークリップを、秒数× 6 °回転させる といった処理を行えばいいわけです。 ----------------------------------------------------------- 実際に作ってみましょう。 仮に、ステージに秒針のムービークリップ” sec_hand ”、タイマーを起動するボタン” start_btn ”があるとし、start_btn がクリックされた時にタイマーを起動することにします。 ( start_btn はボタンシンボルで作られているものとします) 効果音は 10 秒ごとに鳴らし、60 秒経過した時は別の音を鳴らす、といったこともできます。 ついでですから、2種類の音を鳴らす作例を考えます。 音はスクリプトで制御すると、任意のタイミングで鳴らすことができます。 音を鳴らすには Sound クラス( Flash MX ではオブジェクト)を使います。 スクリプトで音を鳴らすには”リンケージ”という設定が必要です。 効果音を2種類読み込み、読み込まれたサウンドシンボルを「ライブラリ」パネルで選択した状態で右クリック( Mac では control +クリック)し、このメニューから「リンケージ...」を選択してください。「リンケージプロパティ」パネルが開きます。 ” ActionScript に書き出し”にチェックを入れ、「識別子:」に何か分かりやすい名前を付けてください。 ここで付けた名前は、スクリプトで音を鳴らす時に必要になります。 とりあえず、10 秒ごとに鳴らす音の識別子を” SEC_ALARM ”、60 秒経った時だけ鳴らす音の識別子を” LIMIT_ALARM ”とします。 ” ActionScript に書き出し”にチェックを入れた時に、同時に”最初のフレームに書き出し”にも自動的にチェックが入り、このシンボルが最初のフレームに書き出されます。 サウンドシンボルの容量によっては最初のフレームに書き出されると困る場合もありますが、短い効果音程度なら最初のフレームに書き出されても特に問題はないと思います。 以上で、効果音のリンケージの設定は完了です。 ******************************* スクリプトは、フレームとスタートボタンである” start_btn ”(ボタンインスタンス)の、両方に設定します。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  ●フレームに設定するスクリプト  //アラーム用のSoundオブジェクトを作成  alarm = new Sound();  //秒数を保持する変数  sec = 0;  /*1分間のアナログ形式タイマー */  /*この関数は1秒ごとに実行される*/  function Timer()  {   //秒数をカウントアップ   sec++;   //10秒ごとにアラームを鳴らす   if( sec % 10 == 0 )   {    //60秒経ったら終了    if( sec == 60 )    {     //終了のアラームを鳴らす     alarm.attachSound( "LIMIT_ALARM" );     alarm.start();     //タイマーを削除     clearInterval( timer_id );     //スタートボタンを元に戻す     start_btn._alpha = 100;     start_btn.enabled = true;    }    //普段は普通のアラームを再生    else    {     alarm.start();    }   }   //秒針を傾ける   sec_hand._rotation = sec * 6;  }  /*タイマーの各種初期化を行う関数*/  function Timer_SetUp()  {   //秒数をリセット   sec = 0;   //アラーム音をセット   alarm.attachSound( "SEC_ALARM" );   //秒針を0秒の位置に戻す   sec_hand._rotation = 0;   //秒を数えるための1秒毎のタイマーをセット   //念のため、古いタイマーは削除しておく   clearInterval( timer_id );   timer_id = setInterval( Timer , 1000 );  }  ●”start_btn”に設定するスクリプト  on(release)  {   //タイマーを起動させる   Timer_SetUp();   //タイマー稼動中はボタンを押せなくする   start_btn._alpha = 20;   start_btn.enabled = false;  } まず、スクリプトで音を鳴らす方法についてですが。 スクリプトで音を鳴らすには、最初に Sound クラスのオブジェクトを作成します。上記のスクリプトでは” alarm ”という名前のオブジェクトを作成しています。 Sound クラスの attachSound という機能(メソッドといいます)で、鳴らすサウンドシンボルを決めます。シンボルは、「リンケージプロパティ」で付けた識別子で指定します。 あとは、Sound クラスの start メソッドを実行する度に音が再生されます。 1つの Sound オブジェクトで鳴らせる音は1種類だけなので、attachSound で別の音を指定すると、次からはその音が鳴るようになります。 上記のスクリプトでは、普段は 10 秒ごとに鳴らす” SEC_ALARM ”を鳴らしていますが、60 秒経過した時点で” LIMIT_ALARM ”に切り替え、違う音を鳴らしています。 ******************************* setInterval に登録される関数は、Timer という関数です。 この関数は1秒( setInterval はミリ秒単位で時間を指定できるので、1秒= 1000 ミリ秒)ごとに呼び出され、sec という変数でカウントを取ります。 つまり、変数 sec の値は1秒ごとに1ずつ増えます。 ” 10 秒ごと”は、変数 sec の値が 10 の倍数であるかどうかで判断することができます。 10 の倍数とは、10 で割った余り(剰余)が0であるということです。 剰余は % 演算子で求めることができます。 変数 sec が 10 の倍数になった時、つまり 10 秒ごとに Sound オブジェクト(上記のスクリプトでは” alarm ”)で音を鳴らし、60 だった時に限り、効果音を切り替えて別の音を鳴らします。 タイマーは 60 秒経過したら止めるので、60 秒経過と判断された時に、ついでにタイマーの後処理も行っています。 秒針のムービークリップも、変数 sec の値を利用して回転させています。 先述の通り、時計の秒針は1秒間に 6 °ずつ傾きますので、秒針の傾きは秒数× 6 で算出できます。 上記のスクリプトでは、秒数は変数 sec に秒で入ります。 つまり、秒針のムービークリップの角度を sec × 6 に設定することで、秒針が回転するように見えるというわけです。 ムービークリップを回転させるには、_rotation というプロパティを操作します。 ******************************* タイマーを起動する時は、変数 sec のリセットや効果音・ setInterval の設定など、いろいろな初期化が必要です。 これらの処理は、” Timer_SetUp ”という関数にまとめています。 つまり、タイマーを動かすボタン” start_btn ”では、この Timer_SetUp 関数を呼ぶだけで済みます。 上記の作例では、一旦タイマーを動かすとボタンが半透明表示になってクリックできなくなり、60 秒経過してタイマーが停止すると再度クリックできるようになっています。 タイマー稼動中もタイマーをリセットして起動可能にする時は、” start_btn ”に設定したスクリプトの  //タイマー稼動中はボタンを押せなくする  start_btn._alpha = 20;  start_btn.enabled = false; この部分を削除してください。 ターゲットパスや ActionScript ・ Flash の基本については、紙面の都合上、省略させていただきました。 秒針のムービークリップが他のムービークリップの入れ子になっていたり、関数や変数を定義する場所が違う場合は、ターゲットパスの誤りにご注意ください。

関連するQ&A