• ベストアンサー

Actionscript3.0 ストップウォッチ

BlurFiltanの回答

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

#1です。 Google検索例だけ書いて放り出すのも何かと思ったので, #1で書いた内容をふまえた上での修正案を書いておきます。 ドキュメントクラスのクラス名は「FlashTest2」で ファイル名は「FlashTest2.as」ということにしておきます。 //------------------------------------ package { import flash.display.Sprite; import flash.display.SimpleButton; import flash.events.Event; import flash.events.MouseEvent; import flash.utils.getTimer; import flash.text.TextField; public class FlashTest2 extends Sprite { public var OldTime:uint; public var NowTime:uint; public var myTextField:TextField = new TextField(); public function FlashTest2() { // timer text myTextField.x = 100; myTextField.y = 70; myTextField.text = "0:00:00"; this.addChild(myTextField); startbtn.addEventListener(MouseEvent.CLICK, ClockStart); stopbtn.addEventListener(MouseEvent.CLICK, ClockStop); } public function Tick(e:Event):void { NowTime = getTimer(); var MiliSeconds = NowTime - OldTime; var s:int = Math.floor(MiliSeconds / 1000); var minutes:int = Math.floor(s / 60); var seconds:int = s % 60; var mili:int = MiliSeconds % 1000; myTextField.text = minutes + ":" + ("0" + seconds).substr(-2,2) +":"+ ("00" + mili).substr(-3,2); } public function ClockStart(e:MouseEvent) { OldTime = getTimer(); this.addEventListener(Event.ENTER_FRAME,Tick); } public function ClockStop(e:MouseEvent) { this.removeEventListener(Event.ENTER_FRAME,Tick); } } } //------------------------------------ もし数時間以上とか 数日間というような長時間を計る場合は getTimer() でも誤差時間が大きくなるので そのような場合は Date クラスの getTime() メソッドで 1970年1月1日0時からのミリ秒数を取得する方法を使う方が良いでしょう。

m0cchi
質問者

お礼

丁寧なご解答ありがとうございます。 そんなに誤差が出てしまうのですね...! 時間はまであれば十分なので大丈夫です。 重ね重ね失礼します。 ストップウォッチの機能を利用して、実験データを作成したいのです。 実験の流れは 1フレーム目:[指示文画面]スタートボタンを押すと[実験画面(2フレーム目)]へ移動。 2フレーム目:[実験画面]二択ボタン どちらかを選ぶと[正(3フレーム目)誤(4フレーム目)画面]へ移動。ここでは、青い『キャンセル』ボタンが誤、普通の『確定』ボタンが正の画面へ移動。 3・4フレーム目:[正誤画面]正か誤と、かかった時間の表示 ●スタートボタン押した時から、二択ボタンどちらかを押した時の時間を計測して最後に表示させたい。 フレームを超えて時間計測するのはどうすればいいのでしょうか。 よろしくお願いします。

m0cchi
質問者

補足

こんにちは、 出して下さった修正案と BlurFiltanさんがほかで回答しているページ http://okwave.jp/qa/q7054298.html を参考に試行錯誤しながら少し変えてみました。 □□□□□□□□□□□□□□□□□□□□ package { import flash.display.Sprite; import flash.display.SimpleButton; import flash.events.Event; import flash.events.MouseEvent; import flash.utils.getTimer; import flash.text.TextField; public class FlashTest2 extends Sprite { public var OldTime:uint; public var NowTime:uint; public var myTextField:TextField = new TextField(); public function FlashTest2() { // timer text myTextField.x = 100; myTextField.y = 70; myTextField.text = "0:00:00"; this.addChild(myTextField); startbtn.addEventListener(MouseEvent.CLICK, ClockStart); n_kakutei.addEventListener(MouseEvent.CLICK, ClockStop1); b_cancel.addEventListener(MouseEvent.CLICK, ClockStop2); } public function Tick(e:Event):void { NowTime = getTimer(); var MiliSeconds = NowTime - OldTime; var s:int = Math.floor(MiliSeconds / 1000); var minutes:int = Math.floor(s / 60); var seconds:int = s % 60; var mili:int = MiliSeconds % 1000; myTextField.text = minutes + ":" + ("0" + seconds).substr(-2,2) +":"+ ("00" + mili).substr(-3,2); } public function ClockStart(e:MouseEvent) { OldTime = getTimer(); this.addEventListener(Event.ENTER_FRAME,Tick); MovieClip(startbtn.parent).gotoAndStop(2); } public function ClockStop1(e:MouseEvent) { this.removeEventListener(Event.ENTER_FRAME,Tick); MovieClip(n_kakutei.parent).gotoAndStop(3); } public function ClockStop2(e:MouseEvent) { this.removeEventListener(Event.ENTER_FRAME,Tick); MovieClip(b_cancel.parent).gotoAndStop(4); } } } □□□□□□□□□□□□□□□□□□□□□□ しかし下記エラーが出てしまいました。 Error #1034: 強制型変換に失敗しました。 FlashTest2@28460089 を flash.display.MovieClip に変換できません。 at FlashTest2/ClockStop2() 「強制型変換に失敗しました movieclip」などで検索をかけてみたのですが、よくわからなくて...。 初心者すぎてすいません。 どうすればいいのでしょうか?

関連する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