2011-04-13 8 views
3

J'ai une simple fonction actionscriptactionscript 3 sommeil?

var string:String = "TEXT REMOVED"; 
var myArray:Array = string.split(""); 
addEventListener(Event.ENTER_FRAME, frameLooper); 

function frameLooper(event:Event):void { 
    if(myArray.length > 0) { 
     text1.appendText(myArray.shift()); 
    }else{ 
     removeEventListener(Event.ENTER_FRAME, frameLooper); 
    } 
} 

Et je veux avoir le sommeil après avoir appelé la framelooper il est un peu plus lent. Comment pourrais-je faire ça?

btw, je suis assez nouveau et trouvé ce code sur un tutoriel, c'est un effet de frappe de texte, s'il y a une meilleure façon de le faire s'il vous plaît faites le moi savoir.

+0

déclarations de sommeil ne font pas beaucoup de sens dans un langage basé sur les événements asynchrones. Il y a cependant quelques pseudo-librairies pour as3, mais je doute que ce soit ce que vous voulez. – bgw

Répondre

7

Utilisez une minuterie:

var string:String = "TEXT REMOVED"; 
var myArray:Array = string.split(""); 
var timer : Timer = new Timer (1000, myArray.length); 
timer.addEventListener (TimerEvent.TIMER, frameLooper); 
timer.start(); 

function frameLooper(event:Event):void { 
    text1.appendText(myArray.shift()); 
} 

Cela exécutera le frameLooper sur chaque seconde pour exactement autant de fois que la longueur du tableau.

0

Je ne dis pas cela vaut mieux que la méthode de la minuterie, juste une option

var string:String = "TEXT REMOVED"; 
var myArray:Array = string.split(""); 
addEventListener(Event.ENTER_FRAME, frameLooper); 

const WAIT_TIME:int = 10; 
var i:int = 0; 
function frameLooper(event:Event):void { 
    if(myArray.length > 0) { 
     if(i==0){ 
      trace(myArray.shift()); 
      i = WAIT_TIME; 
     }; 
    } else { 
     removeEventListener(Event.ENTER_FRAME, frameLooper); 
    } 
    i--; 
}