- ベストアンサー
ムービークリップ再生終了後に時間を測定
- ムービークリップ再生終了後に時間を測定する方法を教えてください
- 開始ボタンを押すとランダムに文字列が生成され、一定時間後に消える機能を作成しました。しかし、文字列が消えた後に時間を計測する方法が分かりません。また、停止ボタンを押した後に一定時間後に開始ボタンを押せるようにする処理もわかりません。どのように処理をすれば実現できるでしょうか?
- 環境はWindows XPとFlash 8を使用しています。詳しい方がいらっしゃれば、教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 結局, 「開始ボタン」と「停止ボタン」は _root に置くのか,ムービークリップ内の置くのか, まて別の場所に置くのかわかりませんが, 「開始ボタン」と「停止ボタン」が同じ階層にある場合だと, どこに置いても使えるようには考えてみました。 スクリプトを書かれたムービークリップにインスタンス名を付けてください。 この説明では「outputMC」というインスタンス名にしておきます。 「開始ボタン」のスクリプト -------------------------------------------- on (release) { // outputMC 内の 関数 randomchoise_A_1() を実行 _root.outputMC.randomchoise_A_1(); // 変数 mytime1 に現在の時間(ミリ秒)を代入 var mytime1 = getTimer(); // // myID1 という setInterval を定義 myID1 = setInterval(function () { // outputMC の 変数 output 消す _root.outputMC.output = ""; // このsetIntervalをクリア clearInterval(myID1); // 2000ミリ秒後(2秒後)に実行 }, 2000); // // 開始ボタンを無効にする start_btn.enabled = false; } -------------------------------------------- 「停止ボタン」のスクリプト -------------------------------------------- on (release) { // 変数 mytime2 に現在の時間(ミリ秒)を代入 var mytime2 = getTimer(); // 変数 outputに mytime2 と mytime1 の差分を代入(秒) _root.outputMC.output = (mytime2-mytime1)/1000; // // myID2 という setInterval を定義 myID2 = setInterval(function () { // 開始ボタンを有効にする start_btn.enabled = true; // 有効になったことを output に代入 _root.outputMC.output = "開始ボタン有効"; // このsetIntervalをクリア clearInterval(myID2); // 2000ミリ秒後(2秒後)に実行 }, 2000); } ------------------------------------------- しかし,なんでそういう奇妙な場所にスクリプトを書かれているのでしょうか? 何か特殊な意味があるのでしょうか。 そうでなければ, そういうたぐいのスクリプトはフレームに書いた方が良いです。 また, 「output」はテキストフィールドの変数名ですよね。 Flash MX 以降は, テキストフィールドに変数名は付けない方が良いです。 妙な思わないトラブルが発生する可能性があります。 今回の回答は,「output」は変数名であるということで, 上のスクリプトは書いていますが, #1で書きましたように, なるべくテキストフィールドにはインスタンス名を付けて, インスタンス名.text でアクセスするようにしてください。 何かどこかしら変です。 今の人は普通考えない, Flash 5 時代の名残が感じられるスクリプトだと思います。
その他の回答 (1)
わからない部分は, getTimer() と setInterval と enabled の3つですね。 メインムービー(_root)のステージ上に, 「mytxt」 というインスタンス名(変数名ではありません)のダイナミックテキストフィールドと, 「start_btn」 というインスタンス名の 開始ボタン と, 特にインスタンス名は不要の 停止ボタン , この3つのオブジェクトがあったとします。 開始ボタン(start_btn) には次のように書き, ---------------------------------- on (release) { // テキストフィールド mytxt に文字列の表示 _root.mytxt.text = "あいうえお"; // 変数 mytime1 に現在の時間(ミリ秒)を代入 var mytime1 = getTimer(); // // myID1 という setInterval を定義 myID1 = setInterval(function () { // テキストフィールド mytxt の表示を消す _root.mytxt.text = ""; // このsetIntervalをクリア clearInterval(myID1); // 2000ミリ秒後(2秒後)に実行 }, 2000); // // 開始ボタンを無効にする _root.start_btn.enabled = false; } ---------------------------------- そして, 停止ボタン には次のように書くと, ご質問で書かれているようなことができます。 ---------------------------------- on (release) { // 変数 mytime2 に現在の時間(ミリ秒)を代入 var mytime2 = getTimer(); // mytxt に mytime2 と mytime1 の差分を表示(秒) _root.mytxt.text = (mytime2-mytime1)/1000; // // myID2 という setInterval を定義 myID2 = setInterval(function () { // 開始ボタンを有効にする _root.start_btn.enabled = true; // 有効になったことを mytxt に表示 _root.mytxt.text = "開始ボタン有効"; // このsetIntervalをクリア clearInterval(myID2); // 2000ミリ秒後(2秒後)に実行 }, 2000); } ---------------------------------- ランダムに文字列を生成する部分は省略して, 文字列「あいうえお」で代用させていただいています。 また, 計測した時間を表示させる場所と, 開始ボタンが有効になったというサインを出す場所が見つからなかったので, 動作確認をし易くするために, 本来ランダムな文字列が入るべき「mytxt」に, 秒数や有効サインを表示させるようにしました。 (trace() よりわかり易いかと思いまして...。) 「外部SWFムービー内のfunctionをロード直後に呼出す」 http://www.fumiononaka.com/TechNotes/Flash/FN0304001.html →このページの真ん中辺り 「3. setIntervalアクションを使う」 を参考 「Flashゲーム講座&ASサンプル集【時間について】」 の 『Flashを開いてから経過時間を表示したい』 http://hakuhin.hp.infoseek.co.jp/main/as/time.html#TIME_00
補足
丁寧な解説ありがとうございます。当方の説明が下手だったため正しく 伝わっていない部分がありました補足させてください。 アドバイスいただいたことを基に、ランダムテキストが配列されている textcilpというムービークリップインスタンスから取り出し、開始ボタ ンで文字列を取り出すようにしていました。その結果、ランダムで文字 列は取り出せるものの、計測を終了したあと、開始ボタンを押しても次 の文字列を生成することが出来ませんでした。 使用しているムービークリップのソースは以下の通りです。 --------------------------------------------------------------- onClipEvent (load) { randomtext_A_1 = new Array("Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D" , "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M"); function randomchoise_A_1() { randomchi_A_1 = Math.floor(Math.random()*26); outputtext_A_1 = randomtext_A_1[randomchi_A_1]; this.output = outputtext_A_1; } randomchoise_A_1(); } ---------------------------------------------------------------- 何度も修正しましたが解決には行き着きませんでした。 お手数をかけて申し訳ありません。出来れば、このムービークリップを 使ってうまく動作させるようにしたいのですが...。