2012-02-23 7 views
2

Je me demande si vous pouvez obtenir le nombre de millisecondes qui se sont écoulées depuis le démarrage d'un temporisateur ActionScript.Obtenir un temps écoulé

Je veux définir une étiquette simple en flex qui a la valeur de combien de temps il faudra avant que le temporisateur ne se déclenche (à nouveau).

c'est le code, à « GET ELAPSED TIME », il me faut le temps que la minuterie est en cours d'exécution (depuis le dernier feu de la fonction):

var timer = new Timer (10000); 
timer.addEventListener(TimerEvent.TIMER, foo); 
timer.start(); 

var numberOfSeconds = timer.delay-timer.'GET ELAPSED TIME'; 

resetLabel.text = "only "+numberOfSeconds+" until foo fires"; 

Est-ce que cette fonction pour obtenir le temps de minuteries existe et comment est-il appelé (google n'a pas réussi à me répondre)?

+0

Connaissez-vous (new Date()). GetTime() fonction? Et si vous aimez faire un tel intervalle simple, lisez à propos des fonctions flash.utils.setInterval et flash.utlis.clearInterval, plus facile que timer. – turbosqel

Répondre

2

Il n'y a pas d'objet réel pour obtenir le temps restant de votre . Une solution de contournement pourrait être d'ajouter une vérification dans votre foo fonction. Une configuration de base ressemblerait à quelque chose comme ceci:

var realDelay:int = 10000; 
var timer:Timer = new Timer (1); 
timer.addEventListener(TimerEvent.TIMER, foo); 
timer.start(); 

function foo(e:TimerEvent) : void 
{ 
    var realCount:int = Math.floor(timer.currentCount/realDelay); 
    var timeLeft:Number = (realDelay-timer.currentCount%realDelay); 
    resetLabel.text = "Real count: " + realCount + ", milliseconds left: " + timeLeft; 
} 
+0

le realDelay est le retard des temporisateurs je suppose? –

+0

Une variation sur ce semble être la seule façon de faire ce travail. Je recommande d'utiliser 'getTimer()' pour obtenir le temps écoulé depuis que la VM Flash Player a commencé à stocker l'heure de début, puis de comparer les heures, au lieu de la méthode currentCount utilisée ici. –

2

Malheureusement, la version de Timer n'a pas de support pour ce que vous voulez. Voici une classe wrapper très simple pour obtenir une durée globale similaire à la suggestion de Sam DeHaan.

package utility 
{ 
    import flash.utils.Timer; 
    import flash.utils.getTimer; 

    /** 
    * DurationTimer 
    * Description: 
    * Extending Timer class to help show elapsed time 
    **/ 
    public class DurationTimer extends Timer 
    { 
     private var _startTime:int; 
     private var _endTime:int; 

     public function DurationTimer(delay:Number, repeatCount:int = 0) 
     { 
      super(delay, repeatCount); 
     } 

     public function get duration():int 
     { 
      return (running) ? getTimer() - _startTime : _endTime - _startTime; 
     } 

     override public function start():void 
     { 
      _startTime = getTimer(); 
      super.start(); 
     } 

     override public function stop():void 
     { 
      _endTime = getTimer(); 
      super.stop(); 
     } 
    } 
}