• ベストアンサー

Actionscript3.0 ストップウォッチ

BlurFiltanの回答

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

まずは, ご質問に "単純に回答するだけ" でしたら 次のようなスクリプトにすれば良いと思います。 変更はごく一部で大半は削除です。 //--------------------------------------- package { import flash.display.Sprite; import flash.display.SimpleButton; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.MouseEvent; import flash.text.TextField; public class FlashTest extends Sprite { public var MiliSeconds = 0; public var Clock = new Timer(10); public var myTextField:TextField = new TextField(); //↓削除(コメントアウト) //public var startBTN:Sprite = new Sprite(); //public var stopBTN:Sprite = new Sprite(); public function FlashTest() { // timer text myTextField.x = 100; myTextField.y = 70; myTextField.text = "0:00:00"; this.addChild(myTextField); //↓削除(コメントアウト) // // start button //startBTN.graphics.beginFill(0xFFCC00); //startBTN.graphics.drawRect(60, 5, 40, 40); //this.addChild(startBTN); //↓変更 startbtn.addEventListener(MouseEvent.CLICK, ClockStart); //↓削除(コメントアウト) //startBTN.addEventListener(MouseEvent.MOUSE_OVER, mOver); //startBTN.addEventListener(MouseEvent.MOUSE_OUT, mOut); //↓削除(コメントアウト) // // stop button //stopBTN.graphics.beginFill(0xCCFF00); //stopBTN.graphics.drawRect(160, 5, 40, 40); //this.addChild(stopBTN); //↓変更 stopbtn.addEventListener(MouseEvent.CLICK, ClockStop); //↓削除(コメントアウト) //stopBTN.addEventListener(MouseEvent.MOUSE_OVER, mOver); //stopBTN.addEventListener(MouseEvent.MOUSE_OUT, mOut); // clock Clock.addEventListener(TimerEvent.TIMER, this.Tick); } public function Tick(e:TimerEvent):void { MiliSeconds++; var s:int = Math.floor(MiliSeconds / 100); var minutes:int = Math.floor(s / 60); var seconds:int = s % 60; var mili:int = MiliSeconds % 100; myTextField.text = minutes + ":" + (seconds > 9 ? seconds : "0" + seconds) +":"+ (mili > 9 ? mili : "0" + mili); } //↓削除(コメントアウト) //public function mOver( e) { // e.target.alpha = 0.5; //} //↓削除(コメントアウト) //public function mOut( e ) { // e.target.alpha = 1; //} public function ClockStart(e) { MiliSeconds = 0; Clock.start(); } public function ClockStop(e) { Clock.stop(); } } } //---------------------------------------   しかし...ですね, ハッキリ言ってこのスクリプトは超駄作です(根本的に考え方が間違っています)。 Timer系 はものすごく時の刻みがイイカゲンなのです。 参考にされたサイトのストップウォッチや 今回の回答のために実際に作成してみたストップウォッチを動かしてみましたが, 私の環境では,1分間動かしても約35秒くらいの時しか刻みませんでした。 誤差が膨大すぎてストップウォッチとしては全く使い物になりません。 Timer系 は 定期的にイベントを発生させるためのしくみであって 時を計るために用意されたものではありません。 参考にされたページには 次のような一文があります。 > ストップウォッチの作成方法には > enterframeとtimerの2種類があり > ざっと検索してみたところ、enterframe系の > 処理はサンプルソースがたくさんあったのですが、 > timer系で処理しているものがみあたらなかったので そりゃ当たり前です。 "時の計測自体" に Timer系 を使う人などいません。 Timer系 にしても EnterFrame系 にしても それらによるイベント発生はものすごく時間がイイカゲンですから それ自体の動作間隔で時間や時刻を計測することはできないのです。 もし Timer系 を使うにしても それ自体で時を計測するのではなく EnterFrame系 の使い方と同様に getTimer() または new Date() などで, 定期的に時間や時刻を取得する必要があります。 それは面倒ですし, Timer系 で実行タイミングを細かく刻んでも 結局表示の更新はデフォルトでは EnterFrame のタイミングで行われるわけですから無意味です。 したがって "普通" は Timer系 など使わず EnterFrame系 の実行タイミングで時間や時刻を取得するのです。 (多くのサイトでしている "普通" にはちゃんと意味があるのです。) getTimer() で得る時間もイイカゲンと言えばイイカゲンで, あまり長時間は計れませんがこれほど莫大な誤差は出ません。 誤差は現行の 1000分の1 くらいになると思います。 Google検索例「getTimer() AS3 ストップウォッチ」 http://www.google.co.jp/search?q=getTimer%28%29+AS3+%E3%82%B9%E3%83%88%E3%83%83%E3%83%97%E3%82%A6%E3%82%A9%E3%83%83%E3%83%81

関連するQ&A

  • FlashのActionScriptについて

    FlashのActionScriptについて Flash CS4(AS2.0)を使用 Flashに関しては初心者で、色々な参考書を見ている中で、 AkutionScriptの書き方に色々なパターンがあって分からなくなりました。 アクションを書き込む際、 (1)専用のActionScriptのフレームを作成してそこに書く (2)ボタンインスタンスに書く (3)対象のシンボルのフレームに書く 上記3つの方法はそれぞれどのような違いがあるのでしょうか?又、どのようにして 使い分けするのでしょうか?

  • ストップウォッチについて

    スタートのボタンとストップのボタンが別々のストップウォッチは有りますか?

  • ストップウォッチについて

    スタート、ストップ、リセットボタンが3つに分かれているストップウォッチを探しています。

  • FlashのActionScriptについて質問です。

    FlashのActionScriptについて質問です。 Flash CS4のAS2.0を使用 ActionScriptの書き方で (1)ボタンインスタンスに書く (2)対象のインスタンスのフレームに書く (3)ActionScript専用のフレームを作成しそこへ書く 参考書等を読んでいるとActionScriptを書くときに、上記3つの方法が あり混乱しています。 それぞれ、どのような違いがあるのでしょうか?また、どのように使い分けるのでしょうか? Flashに関しては、始めたばかりの超初心者です。どうぞ宜しくお願いします。

  • ストップウォッチの改造について

    ストップウォッチのスタート・ストップについて ボタンを押している間は停止で、ボタンを離すと計測を開始するといった改造は可能ですか? その逆で、押している間は計測で離すと停止するでも構いません アドバイスお願いします

  • Actionscript3.0のスキップボタンについて教えてください。

    FlashCS4になり、Actionscriptの組み方が変わってから簡単だった、ループ停止とスキップボタンの作り方がわからなくて悩んでいます。 ちなみに、ループ停止は stop(); スキップボタンは、ボタン(インスタンス名;skip)を作って skip.gotoAndStop(1980); クリックしたらそのまま最後で停止する。 としています。 分かる方いらっしゃいましたらご回答よろしくお願いします><

    • ベストアンサー
    • Flash
  • FLASH8でActionscriptが動きません

    FLASH8のActionscriptを使って簡単なイベント処理を実行したいのですが、うまくいかず困っています。 conts1_btnというインスタンス名を付けたボタンをクリックしたら、Contents1というラベルを付けたフレームに飛ぶという処理です。 以下、そのコードです。 function go_conts1(btn1event) { this.gotoAndPlay("Contents1"); } conts1_btn.addEventListener(MouseEvent.CLICK,go_conts1); FLASH CS3の参考書を見て、記述したのですが8とCS3では記述方法に違いなどあるのでしょうか?宜しくお願いします。

  • JavaScriptのストップウォッチについて

    以下のコードでストップウォッチを作りました ここまではできるのですがここに新たな仕様として ・画面を開いてから3秒後に自動でカウントする というコードを入れたいです ですからスタートボタンをなくしてストップとリセットだけにしたいです 初心者なので変なコードになっているかもしれません その時はこうした方がいい!みたいなことを言っていただけるとすごく助かります どなたかご教授お願いします HTMLコード <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="css/aaa.css" rel="Stylesheet" /> </head> <body> <h1>ストップウォッチ</h1> <div id="sec" style="font-size:100px;">0.00</div> <input id="btn_start" type="button" value="Start" onclick="start();"> <input id="btn_stop" type="button" value="Stop" onclick="stop();"> <input id="btn_reset" type="button" value="Reset" onclick="reset();"> <script> var sec = 0.00; var timerId; //スタートボタン function start() { timerId = setInterval(function() { sec += 0.01; document.getElementById('sec').innerHTML = Math.round(sec*100)/100; //もしも0.0で表示したければ10にすること },10); //この数字はカウントの速さ0.00表示の時は10! } //ストップボタン function stop(){ clearInterval(timerId); } //リセットボタン function reset(){ document.getElementById('sec').innerHTML = '0.00'; sec = 0.00; } </script> </body> </html> CSSコード body { background-color:#B2B2B2; } h1 { background-color:#00EFFF; } #sec { background-color:#00EFFF; } #btn_start ,#btn_stop ,#btn_reset { margin-top:25px; background: -moz-linear-gradient(top,#BFD9E5, #63B0CF 50%,#0080B3 50%,#09C); background: -webkit-gradient(linear, left top, left bottom, from(#BFD9E5), color-stop(0.5,#63B0CF), color-stop(0.5,#0080B3), to(#09C)); border: 1px solid #DDD; color: #FFF; width: 60px; padding: 10px 0; }

  • FlashのActionScriptについて

    FlashのActionScriptについて質問です。 Yesか Noを選択する、診断テストみたいなフラッシュを作りたいのです。 1フレームには一番はじめの Yes Noが表示されています。 それのどちらかのボタンをクリックするまで、次のフレームに流れないようにするには、 1フレーム目にstop();でよいのでしょうか? それとも、sotoAndstopとかなのでしょうか? また複数のレイヤーがあるときstop();などのアクションスクリプトは 全部につけなければいけませんか?

  • Flashでボタンをつくっているのですが、actionscriptをつ

    Flashでボタンをつくっているのですが、actionscriptをつかってボタンをクリックさせたいのですが、アクションパネルのところに「現在の選択範囲にアクションを割り当てることはできません。」と表示されてしまいます。 参考書に附属されているflaをみたところ、Actionscript1.0、2.0となっているのですが、作成しているのはActionscript3.0で作っています。 ====== on (release) { /*↑ボタンが押されて離されたら*/ _parent.gotoAndPlay("about"); /*↑「about」ラベルへ移動*/ } ====== このようなscriptをいれたいのですが、うまくいきません。 ムービークリップでボタンを作るまではできました。その後、何かが抜けているのかして上記のようなエラーがでます。 flash初心者のため、どういう風に書いて質問させていただいたらよいのかわからないのですが、参考flaと見比べたときに「シンボル定義」のなかにあるムービークリップがひとつたりませんでした。(このムービークリップは「navigation」というものですのでそれがありません。) 質問するにはあまりにも情報が少ないかもわかりませんが、何卒ご教授いただけると大変助かります。 宜しくお願い致します。

    • ベストアンサー
    • Flash