• 締切済み

経過時間を計るには

簡単なクイズゲームを作っています。回答するまでにかかった時間を計って表示させたいのですがどうしたらいいでしょうか? クイズはランダムにフレームを移動して出題していて、回答したら(ボタンを押したら)またランダムにフレーム移動します。 5回回答したら結果画面のフレームに移動します。そこで回答するまでにかかった平均時間を表示させたいです。 環境はWindowsXP Flash8です。

みんなの回答

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

全問解答するまでにかかった平均時間は, トータルの経過時間を,問題数(クリック数)で割れば良いだけです。 トータルの経過時間は, getTimer() を使えば ミリ秒単位で取得できます。 ただそれだけのことですが, 作成物がたくさん出てきたり,フレームがたくさん出てきたりするような場合, こういうテキストのみでしか回答できない場所では具体的なスクリプトやその説明をするのが難しいです。 また,作成物などを指示通りに作成するのもかなり難しいと思います。 したがいまして, ActionScript で,なおかつ単フレームで説明します。 新規ドキュメントを作成して, フレーム1 の空白キーフレームに, 次の ////// から ////// の間のスクリプトを全文コピペして, ムービープレビュー もしくは SWF をパブリッシュしてください。 そして,この回答の最初に書いた4行をなんとか理解してください。 /////////////////////////////////////////////////////////////// // 前半はボタンなどの作成で本題とは関係ありません // まずスタートボタン(MC)を作成します staMC = _root.createEmptyMovieClip("start_mc", 0); staTF = staMC.createTextField("start_txt", 0, 0, 0, 0, 0); staTF.autoSize = true; staTF.background = true; staTF.backgroundColor = 0xFF6666; staTF.text = " スタート "; staMC._x = Stage.width/2-staMC._width/2; staMC._y = 50; // // 次に解答ボタン(MC)を作成します kaiMC = _root.createEmptyMovieClip("kaitou_mc", 1); kaiTF = kaiMC.createTextField("kaitou_txt", 0, 0, 0, 0, 0); kaiTF.autoSize = true; kaiTF.background = true; kaiTF.backgroundColor = 0x66FFFF; kaiTF.text = "  解答  "; kaiMC._x = Stage.width/2-kaiMC._width/2; kaiMC._y = 100; // // 次に経過時間表示用テキストフィールドを作成します keiTF = _root.createTextField("keika_txt", 3, 0, 150, 60, 22); keiTF.border = true; keiTF._x = Stage.width/2-keiTF._width/2; keiTF.text = "0.000"; // // 次に平均時間表示用テキストフィールドを作成します heiTF = _root.createTextField("heikin_txt", 2, 0, 200, 60, 22); heiTF.border = true; heiTF._x = Stage.width/2-heiTF._width/2; heiTF.text = " ---------- "; // // 解答ボタン(MC)は一応非表示にしておきます kaiMC._visible = false; // // ------------------------------------ // // ☆★以下が本題です★☆ // 解答ボタンクリック回数カウント用の変数 cnt の初期化 cnt = 0; // クリック回数を設定(5回) clc = 5; //------ // スタートボタンクリック時の動作定義 _root.start_mc.onRelease = function() { // 変数 time1 に現在の経過時間をセット _root.time1 = getTimer(); // 1フレーム進む時間毎に随時処理 _root.onEnterFrame = function() { // 経過時間を表示 _root.keika_txt.text = (getTimer()-_root.time1)/1000; }; // 解答ボタンを表示させます _root.kaitou_mc._visible = true; // 一応 このスタートボタンは削除しておきます this.removeMovieClip(); }; //------ // 解答ボタンクリック時の動作定義 _root.kaitou_mc.onRelease = function() { // 解答ボタンクリック回数カウント用の変数 cut の値に1を加算 _root.cnt++; // クリック回数が指定回数に達すれば if (_root.cnt == _root.clc) { // その時点での経過時間を表示 _root.keika_txt.text = (getTimer()-_root.time1)/1000; // 平均時間を表示 _root.heikin_txt.text = (getTimer()-_root.time1)/1000/_root.clc; // 一応 経過時間を随時算出する関数を削除しておきます delete _root.onEnterFrame; // 一応 この解答ボタンも削除しておきます this.removeMovieClip(); } }; /////////////////////////////////////////////////////////////// ※ 前半のボタンなどを作成する部分のスクリプトは,   Flash Player 8 以上の SWF をパブリッシュしないと動作しません。   後半の本題の部分は,   Flash Player 6 以上でも動作するスクリプトです。 できた Flash(SWF) の, 「スタート」をクリックすれば,随時の経過時間のカウントが始まります。 「解答」を5回クリックすれば,その5回にかかった平均時間が一番下のテキストフィールドに表示されます。 骨子のみを簡単に書くと,最初に書きました4行の通り,  平均時間(秒) = 経過時間(ミリ秒)÷1000÷クリック数     ↓つまり↓  平均時間 = (getTimer()-カウント開始時間)/1000/クリック数     ↓上の場合での具体的なスクリプトは↓  _root.heikin_txt.text = (getTimer()-_root.time1)/1000/_root.clc; と,これだけです。 上の例は1フレームのみの場合のやりかたです。 フレーム移動を使う場合は, 最初から不要なボタンなどをそのフレームに配置しなければ良いだけですから, ボタンの削除 や ボタンの表示非表示 などのスクリプトは当然不要になると思います。 その代わり,gotoAndPlay() とか gotoAndStop() などが必要になると思います。

supertentu
質問者

お礼

回答ありがとうございます! やりたいことができました