Aide - Recherche - Membres - Calendrier
Version complète : Mon timer est a la ramasse...
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
Sol@rweb
Hello tout le monde,

Je voulais faire un petit timer en flex, avec affichage notamment de la valeur en secondes.

J'ai donc trouvé que l'on pouvait utiliser la classe Timer pour faire cela, en lui indiquant un délai de déclenchement d'un event.

Jusqu'ici niquel, je fais mon pti truc, déclenchement tous les 100 millisecondes, je met à jour une variable en binding pour afficher les secondes.

CODE
public var time:Number;
[Bindable] public var seconds:Number;

this.time = 0;
this.myTimer = new Timer(100, 0);
this.myTimer.start();
    
this.myTimer.addEventListener(TimerEvent.TIMER, onTime);

public function onTime(e:Event):void
{
    this.time++;
    this.seconds = (this.time/10);
}


Et donc, je trouvais que mon affichage était bien lent pour des secondes.

Avec un chrono on voit clairement qu'il est en retard.

Pourquoi ? Comment y remédier ? Me suis-je planté qqpart ^^

++
Tonic
Salut,

comme ceci c'est mieux non?

CODE
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" autoLayout="false" focusRect="0" creationComplete="init()">
    <mx:XML source="fichier.xml" id="xml" />
    <mx:Script>
        <![CDATA[                        
            
            [Bindable] public var seconds:Number;        
            
            private var myTimer : Timer;
            private var montime : Number = 0;
            
            public function onTime(e:Event):void
            {
                montime++;
                seconds = (montime%60);
                trace(seconds);
            }
            private function init():void
            {
                myTimer = new Timer(1000, 0);
            myTimer.start();
                    
            myTimer.addEventListener(TimerEvent.TIMER, onTime);
            }            
        ]]>
    </mx:Script>      
</mx:Application>
Sol@rweb
La je t'avoue que c'est moi qui suit à la masse ^^

Le % c'est bien le modulo en flex aussi ? ^^

1000 millisecondes est bien égal à 1 seconde ?

Et pour finir, si jveux un affichage précis, genre 1.125 s je fais comment ? ^^

Enfin la je comprend pas merci d'avance pour l'explication wink.gif
Sol@rweb
En fait après réflexion, ta solution est logique, mais elle n'affiche que les secondes et fait 58, 59, 60, 0, 1...

Dans mon cas je souhaite continuer 59, 60, 61... et si possible avec les millisecondes.

Tout ce que ça prouve ici c'est qu'il est plus régulier quand on lui demande un interval de 1000 millisecondes plutot que 100 voir 1 milliseconde.

Donc, voila, que peut-on faire contre cette irrgularité ? Faut-il utiliser une autre méthode ?
dada
Salut,

attention avec Timer, c'est comme un setInterval, rien ne dit qu'il va se déclencher toutes les 100ms avec la précision d'une horloge atomique. Car les déclenchements sont dépendant de la cadence de ton animation, peu précise.
Tu peux utiliser Timer pour déclencher du code toutes les (environ) 100ms, mais pour compter le temps écoulé depuis le début utilise la méthode flash.utils.getTimer().

CODE
var tDepart:Number = getTimer();
var tEcoule:Number;
var timer:Timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, tempsEcoule);
timer.start();

var tf:TextField = new TextField();
addChild(tf);

function tempsEcoule(e:Event):void
{
    tEcoule = getTimer() - tDepart;
    tf.text = String(tEcoule/1000);
}


++ smile.gif
Sol@rweb
Yop dada,

En effet ça change tout icon_mrgreen.gif

J'ai pas utilisé le setInterval parce que je savais bien qu'en précision c'était pas ça, mais le Timer je savais pas trop.

Dans tous les cas j'avais pas pensé à le coupler avec un getTimer() qui marche fort bien.

merci à toi wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.