2016-12-07 2 views
1

que je fais quelque chose dans actionscript 3, et quand j'appuie sur le premier bouton btnSkaffPenger, il augmente le nombre de 1 pour chaque clic. Mais mon deuxième bouton btnTrePrinter est censé augmenter le nombre de 1 toutes les 2 secondes, automatiquement, mais ne fonctionne qu'une fois, et ne marche pas réinitialiser. (J'ai ajouté de sorte que vous ne pouvez appuyer sur le bouton une fois, je ne pense pas que interfère avec la remise à zéro de la fonction)Utilisez le bouton pour activer la minuterie dans une fonction

Merci

Le code de boutons:

btnTrePrinter.addEventListener(MouseEvent.CLICK, trePrinter); 
function trePrinter(evt:MouseEvent):void 
{ 
    var timer:Timer = new Timer(2000); 
    var harVentet:Function = function(event:TimerEvent):void{ 
     timer.removeEventListener(TimerEvent.TIMER, harVentet); 
     timer = null; 

     sumPenger++ 
     txtSumPenger.text = sumPenger.toString(); 
    } 
    timer.addEventListener(TimerEvent.TIMER, harVentet); 
    timer.start(); 

    btnTrePrinter.mouseEnabled = false; 
    btnTrePrinter.alpha=0.4; 
} 

code complet:

import flash.events.MouseEvent; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

var sumPenger:int = 0; 

btnSkaffPenger.addEventListener(MouseEvent.CLICK, penger1); 
function penger1(evt:MouseEvent):void 
{ 
    sumPenger++ 
    txtSumPenger.text = sumPenger.toString(); 
} 

btnTrePrinter.addEventListener(MouseEvent.CLICK, trePrinter); 
function trePrinter(evt:MouseEvent):void 
{ 
    var timer:Timer = new Timer(2000); 
    var harVentet:Function = function(event:TimerEvent):void{ 
     timer.removeEventListener(TimerEvent.TIMER, harVentet); 
     timer = null; 

     sumPenger++ 
     txtSumPenger.text = sumPenger.toString(); 
    } 
    timer.addEventListener(TimerEvent.TIMER, harVentet); 
    timer.start(); 

    btnTrePrinter.mouseEnabled = false; 
    btnTrePrinter.alpha=0.4; 
} 
+0

Si vous voulez que cette minuterie pour changer la valeur toutes les deux secondes, pourquoi tuez-vous le chronomètre après le premier appel de fonction? Supprimer le code: 'timer.removeEventListener (TimerEvent.TIMER, harVentet); timer = null; 'et la minuterie fonctionnera comme prévu. – Nbooo

+1

wow merci, se sentir stupide maintenant. Merci beaucoup, je serais sérieusement ne l'aurais pas découvert! <3 –

+0

Content d'apprendre que ça a aidé! – Nbooo

Répondre

0

Comme je l'ai dit, il est une mauvaise pratique de mettre la réponse dans les commentaires, donc je poste une fois de plus.

Juste pour clarifier ce qui se passe dans votre code:

var timer:Timer = new Timer(2000); 
// the timer created with 2 seconds delay and infinite repeats 

var harVentet:Function = function(event:TimerEvent):void { 
    // 2 seconds passed after "timer.start()" call 
    // it's the first invocation of this listener 
    timer.removeEventListener(TimerEvent.TIMER, harVentet); 
    timer = null; 
    // the listener is removed and timer is destroyed 
    // since the listener removed from timer, no more invocations will happen 
    sumPenger++ 
    txtSumPenger.text = sumPenger.toString(); 
} 
timer.addEventListener(TimerEvent.TIMER, harVentet); 
// the listener is added to timer 
timer.start(); 
// the timer starts 

Supprimer ce code:

timer.removeEventListener(TimerEvent.TIMER, harVentet); 
timer = null; 

et la minuterie fonctionnera comme prévu.