2012-09-19 18 views
5

As3'te bir zaman sayacı nasıl oluşturulur? Google'daki bazı basit aramalar, aslında olayların bir sayacı olan AS3 sınıfı Zamanlayıcı'ya ve uygun bir zaman değil sayma yardımcı programına işaret edecektir.AS3'te bir (uygun) zaman sayacı oluşturma

Bu http://blogs.adobe.com/pdehaan/2006/07/using_the_timer_class_in_actio.html'u görmüştüm ve çalışması gereken resmi belgeler olduğundan biraz endişeliyim.

S: Tam olarak sorun nedir?

A: Timer sınıfı olayların bir yığın operasyonları yürüten ve bir oldukça ağır bir uygulama varsa saniye, milisaniye ya da her neyse saymak için kullanmak eğer ben zamanlayıcı zamanınızı bozar bahse girebilirsiniz.

cevap

1

Bunu nasıl geçersiz kılarsınız?

Date sınıfını, zamanı doğru olarak sayan bir komut dosyasında da kullanıyoruz.

  1. ilk karede bu kodu ekleyin
  2. minText, secText, MilText adında 3 Metin kutularının eklemek yeni AS3 belgesi ve bir düğme olarak adlandırılan start_btn oluşturun:

var STT: int; // başlangıç ​​zamanını
var myTimer: Timer = new Timer (1 Timer) olarak izlemek için bu değişkeni kullanırız; // bu bizim zamanlayıcımız

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); 
} 

Neden zaman damgalarına ihtiyaç duyuyorsunuz ve Date sınıfının işlevlerini kullanmıyorsunuz?

Eğer iki olay arasındaki farkı saymak istiyorsanız muhtemelen bu kullanırsınız Çünkü: Başlangıç ​​olay 57'th ikinci olur ve bitiş olay olur ise çok yanlış

 endEvent.seconds - startEvent.seconds 

17 saniye sonra, 20 yerine -40 saniye alırsınız.

+1

'flash.utils.getTimer() Bu aldığım' Date' sınıf – BadFeelingAboutThis

5

doğru bir tedbir süresinin kısa aralıklarla Flash oynatıcısını başladığından beri geçen milisaniye sayısını döndürür getTimer() fonksiyonunu (flash.utils.getTimer), kullanmak arıyorsanız. prototipini basit StopWatch sınıftır:

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; 
    } 
} 

More Info:

+0

uyarınca ', daha verimlidir Date() sistem zamanına bağlı olduğundan biraz şüphe ediyor ancak getTimer() Flash çalışma zamanı sanal makinesine güveniyor. Test edilmeli, ancak ağır uygulamalarda da geride kalabileceğimi düşünüyorum. – BadFeelingAboutThis

+0

kullanarak kesinlikle daha iyi olan başka bir cevap – Mike

+0

@mugur Ne buna dayanırsınız? Her iki durumda da, belirli sistem zamanı veya sistem onayları için temel işletim sistemi sorulur (bkz. Http://en.wikipedia.org/wiki/GetTickCount) –