質問: 0; これでも駄目で。。。 方法知っている方がいらっしゃいましたら 教えてください! お願いします。
回答: flash 8 をご使用であることは, ご質問に書いてくださているのでわかりましたが, flash lite(携帯用 flash) の swf ファイルを作成しようとされているのでしょうか? もしそうでなければ, 書いていらっしゃるurlのストップウォッチのサンプルは, 作り変えるにしてもあまり使用しない方が良いサンプルですよ。 (flash lite 1.x には好都合ですが。) 昔(flash 4 時代)はそれで良かったのですが, 今や使われない方法(フレームのグルグルループ)が使われていたりします。 また, テキストフィールドに変数名を付けることも今(flash mx 以降)推奨されていません。 flashドキュメンテーション 「テキストフィールドのインスタンス名と変数名について」 http://livedocs.macromedia.com/flash/8_jp/main/00001418.html > プロパティインスペクタの [変数] テキストボックスで、 > 変数名をダイナミックテキストフィールドや > テキスト入力フィールドに割り当てることができます。 > これによって、変数に値を割り当てることができます。 > これは、旧バージョンの flash player > (flash player 4 など) 用のアプリケーションを > 作成するときに使用する可能性のある非推奨の機能です。 さらに, テキストフィールドの変数名に テキストフィールドの textプロパティ と同じ text という変数名が使われていたり, flash 4 の flaファイル → flash 8 に自動変換されるときに, 特に必要のない number() 関数が付加されたりしています。 考え方を学ぶ上でのサンプルとしては使用されても当然かまわないのですが, 今現在の flash 8 でスクリプトを実際に使用するのはかなりお薦めできませんよ。 著作権とかそういう問題ではなく, 思わないところで正常に動かないトラブルが発生する可能性があります。 回答の前にそれが気になって。 もし,そのサンプルを作り替える方向で回答する場合は, 結局,全文スクリプトを修正した上で,さらに発展の説明をしなければなりません。 それは辛いですし, そういうことをしてもあまり意味がないので, サンプルを無視して,なるべく今風なものを最初から作る方法の一例を回答します。 /////////////////////////////////////////////////////////// 新規ドキュメントを作成して,ステージ上に, 「timer」というインスタンス名(変数名ではありません)のダイナミックテキストのテキストフィールドと, 「clear_btn」というインスタンス名のボタンシンボルのインスタンス, 「start_btn」というインスタンス名のボタンシンボルのインスタンス, 「stop_btn」というインスタンス名のボタンシンボルのインスタンス, この4つのインスタンスを用意します。 「timer」 はストップウォッチの時間の表示部分, 「clear_btn」はクリアボタン, 「start_btn」はスタートボタン, 「stop_btn」はストップボタンです。 ステージ上をイメージすると次のような感じです ------------------------------------------- [ インスタンス名「timer」 のダイナミックテキスト ] [clear] 「start」 「stop」 (clear_btn) (start_btn) (stop_btn) ...インスタンス名 ------------------------------------------- そして, スクリプト用にレイヤーを新規追加で作成して, そのレイヤーの空白キーフレームである フレーム1 に, 次のスクリプトを書けば完成です(コピペ可)。 // 各変数の初期化と宣言 var start_flg:boolean = false; var clear_flg:boolean = true; var time1:number, time2:number; // // テキストフィールド (インスタンス名 timer) の初期化 _root.timer.text = 0; // // 1フレーム進む時間ごとに毎回実行 _root.onenterframe = function() { // start_flg の値が true であれば if (start_flg) { // 現在の時間と変数 time1 の差を timer に表示 _root.timer.text = gettimer()-time1; } }; // // クリアボタン(clear_btn)のonrelease動作を定義 _root.clear_btn.onrelease = function() { timer.text = 0; clear_flg = true; start_flg = false; }; // // スタートボタン(start_btn)のonrelease動作を定義 _root.start_btn.onrelease = function() { if (clear_flg && !start_flg) { time1 = gettimer(); } else if (!clear_flg && !start_flg) { time1 = gettimer()-time2; } clear_flg = false; start_flg = true; }; // // ストップボタン(stop_btn)のonrelease動作を定義 _root.stop_btn.onrelease = function() { if (start_flg) { start_flg = false; time2 = gettimer()-time1; } }; flash mx 2004 以降で使用可能なスクリプトです。 swf のパブリッシュは flash player 6 まで下げても大丈夫です。 冒頭の3行(コメント行を入れると4行)の 各変数の初期化と宣言 の部分で, 各変数の初期化 は必要ですが,宣言は特になくても大丈夫です。 つまりこうしても↓でもokです。 // 各変数の初期化 var start_flg = false; var clear_flg = true; フレームは,1フレームのみです。 今はストップウォッチのような再計算に, フレームのグルグルループはほとんど使用されません。 onenterframe という便利なものを使うのが普通です。 「クリアボタン」が難しいという内容のご質問を書かれていますが, 実際は最初から作ってみると, 「ストップボタン」より「クリアボタン」の方が簡単に作れるのですよ。 「クリアボタン」がクリックされたときに表示を 0 にして, 次に「スタートボタン」がクリックされるときに, 新しい時間を gettimer() で取得して, その値と随時取得される gettimer() の値との差をテキストフィールドに表示すれば良いだけですから。 「ストップボタン」がそう簡単には行かないのです。 「ストップボタン」がクリックされたときに表示を止めて, とにかくその時点での表示時刻を保存しておいて, 次に「スタートボタン」がクリックされるときに, 新しい時間を gettimer() で取得した上で保存しておいた値を引いてやって, その値と随時取得される gettimer() の値との差をテキストフィールドに表示しなければなりません。 文章を見るだけでもややこしいですが, 考えるのはもっとややこしいです。 ストップウォッチの心臓部分は,次の1行です。 // 現在の時間と変数 time1 の差を timer に表示 _root.timer.text = gettimer()-time1; ここで最終的に, 随時所得される時間と,変数 time1 の差を計算してテキストフィールドに表示しています。 gettimer() で得られる値はミリ秒です。 一般人にとっては,例えば, 「5269ミリ秒」と言われるより, 「5.269秒」と言われる方がわかりやすいと思います。 もしそういう秒にしたい場合は次のように変えるとわかりやすいと思います。 かなり横長になってしましましたが↓。 // 現在の時間と変数 time1 の差を timer に表示 _root.timer.text = math.floor((gettimer()-time1)/1000)+"."+("00"+(gettimer()-time1)).substr(-3, 3); 改行しているように見えるかもしれませんが1行です。 別に上のようにしなくても,単純にミリ秒を1000で割って, 次のようにしてもかまいません。 // 現在の時間と変数 time1 の差を timer に表示 _root.timer.text = (gettimer()-time1)/1000; でも,このようにしただけの場合だと, サンプルにあるようにテキストフィールドを右詰め設定にすると, 小数点以下の数が変わって桁がガクガク変動して見にくいので, 桁合わせをしたのが,上の長いスクリプトです。 あと, 単なるフラグである start_flg や clear_flg の if文条件分岐が込みいっていますが, これの大半はエラー処理のためです。 素直に「スタートボタン」を押して, 各ボタンのクリックも1回ずつしかしないという方ばかりだと, このように複雑にはなりませんが, 人間というものは,そう素直で単純ではありません。 ストップウォッチのカウントが始まってもいないのに, いきなり 「ストップボタン」 をクリックしたり, 同じ「スタート」 ボタンや 「ストップボタン」 を2回も3回も続けて押す人も出てくるでしょう。 そういう変な使い方をされた場合でも, 変な表示が出ないように色々分岐させてあるのです。 これは1つ1つは説明できません。 以上, ストップウォッチの一例として見てください。