6

as3でタイムカウンターをどのように作成しますか?グーグルでいくつかの簡単な検索は、実際にはイベントのカウンターであり、適切な時間カウントユーティリティではないAS3クラスタイマーを指し示します。

私はこのhttp://blogs.adobe.com/pdehaan/2006/07/using_the_timer_class_in_actio.htmlを見てきましたが、それが機能するはずの公式ドキュメントであるという事実に少し心配しています。

Q:問題はどこにありますか?

A: Timerクラスはイベントのスタックで操作を実行します。かなり重いアプリケーションを使用している場合、タイマーを使用して秒やミリ秒などをカウントすると、タイマーが時間を歪めることは間違いありません。

4

2 に答える 2

6

短い時間間隔を正確に測定getTimer()したい場合は、関数 ( flash.utils.getTimer) を使用するだけです。この関数は、Flash プレーヤーが開始してから経過したミリ秒数を返します。プロトタイプの単純な StopWatch クラスは次のとおりです。

public class StopWatch {
    private var _mark:int;
    private var _started:Boolean = false;

    public function start():void { _
        mark = getTimer(); 
        _started = true;
    }

    public function get elapsed():int { 
        return _started ? getTimer() - _mark : 0; 
    }
}

より詳しい情報:

于 2012-09-19T13:16:10.553 に答える
1

これをどのようにオーバーライドしますか?

時間を適切にカウントするスクリプトでもDateクラスを使用するだけです。

  1. 新しい AS3 ドキュメントを作成する
  2. minText、secText、MilText という名前の 3 つのテキスト ボックスと、start_btn というボタンを追加します。
  3. 最初のフレームに次のコードを追加します。

var stt:int;// この変数を使用して開始時刻をタイムスタンプとして追跡します
var myTimer:Timer = new Timer(1); // これはタイマーです

var starttime:Date; // pretty obvious
var actualtime:Date; // pretty obvious

myTimer.addEventListener(TimerEvent.TIMER, stopWatch); // we start counting with this counter

start_btn.addEventListener(MouseEvent.CLICK, startClock); // add a button listener to start the timer

function startClock(event:MouseEvent):void
{
    starttime = new Date(); // we get the moment of start
    stt = int(starttime.valueOf().toString()); // convert this into a timestamp
    myTimer.start(); // start the timer (actually counter)
}

function stopWatch(event:TimerEvent):void
{
    actualtime = new Date(); // we get this particular moment       
    var att:int = int(actualtime.valueOf().toString()); // we convert it to a timestamp

    // here is the magic
    var sec:int = (Math.floor((att-stt)/1000)%100)%60; // we compute an absolute difference in seconds
    var min:int = (Math.floor((att-stt)/1000)/60)%10; // we compute an absolute difference in minutes
    var ms:int = (att-stt)%1000; // we compute an absolute difference in milliseconds

    //we share the result on the screen
    minText.text = String(min);
    secText.text = String(sec);
    milText.text = String(ms);
}

タイムスタンプが必要なのに、Date クラスの関数を使用しないのはなぜですか?

2 つのイベントの差を数えたい場合は、おそらく次のようにします。

     endEvent.seconds - startEvent.seconds

開始イベントが 57 秒で発生し、終了イベントが 17 秒で発生した場合、これは非常に間違っています。20 秒ではなく、-40 秒となります。

于 2012-09-19T08:49:34.093 に答える