2010-05-11 5 views
0

Mon animation de texte fonctionne parfaitement, mais ne se répète pas. Comment puis-je répéter cela? Désolé je ne sais pas Flash bien, mais je veux juste que cela se joue encore et encore. Merci.animation de texte de répétition, as3

var myArray:Array = ["Big", 
        "Holiday", 
        "Sale", 
        "Buy", 
        "Now", 
        "And", 
        "Save"]; 
Timer 
var tm:Timer = new Timer(500,0); 
tm.addEventListener(TimerEvent.TIMER, countdown); 
function countdown(event:TimerEvent) { 
if (myArray.length>0){ 
tx.text = myArray.shift(); 
} 
} 
tm.start(); 

J'ai essayé

if (++myArray.length % 10 == 0) 

Répondre

2

solution simple:

myArray.push(tx.text = myArray.shift()); 

, mais la solution de sharvey est signifficantly mieux. il travaillerait comme ceci:

var myArray:Array = ["Big", 
        "Holiday", 
        "Sale", 
        "Buy", 
        "Now", 
        "And", 
        "Save"]; 
var tm:Timer = new Timer(500,0); 
var index:int = 0; 
tm.addEventListener(TimerEvent.TIMER, countdown); 
function countdown(event:TimerEvent) { 
    tx.text = myArray[index]; 
    index = (index + 1) % myArray.length;//increment and "wrap around" 
} 
tm.start(); 
+0

'le premier tourne butshows null ref, le second est parfait. Merci – pixelGreaser

3

lieu de déplacement() uant des choses de votre choix, gardez l'index que vous êtes à (0 au début) et l'incrément dans votre compte à rebours, modulo la longueur le tableau.

+0

if (++ myArray.length% 10 == 0) J'ai essayé ceci, mais le texte doit être non nul. Avez-vous un exemple de comment cela fonctionnerait? – pixelGreaser

+1

D'où vient le 10, il semble y avoir seulement 7 mots dans ce tableau. Aussi vous ne pouvez pas changer la propriété array.length comme ça. – sharvey

1

Que signifie sharvey est quelque chose de similaire à ceci:

var myArray:Array = ["Big", 
        "Holiday", 
        "Sale", 
        "Buy", 
        "Now", 
        "And", 
        "Save"]; 
var tm:Timer = new Timer(500); 
tm.addEventListener(TimerEvent.TIMER, countdown); 
function countdown(event:TimerEvent) { 
    tx.text = myArray[(tm.currentCount-1)%myArray.length]; 
} 
tm.start(); 

Nous soustrayons 1 de tm.currentCount d'utiliser le compte comme un indice de tableau (0 sur la base), puis utilisez modulo (%) pour "boucler/contraindre" le compte à la longueur du tableau. En outre, la minuterie fonctionne maintenant "pour toujours".

Nous sommes tous disent la même chose de façon légèrement différente :)

+0

Cela fonctionne très bien, je l'ai maintenant. – pixelGreaser

1

Hey, je ne veux pas être une grande fête pooper, mais ne serait pas quelque chose comme cela sera mieux résolu en utilisant la Timeline de Flash? C'est à dire. créer une animation en boucle dans Flash lui-même? De cette façon, vous l'exportez dans ActionScript et ajoutez l'animation en tant qu'enfant dans votre code.

var anim:MyOffensiveAnimation = new MyOffensiveAnimation(); 
addChild(anim); // that's it, animation starts playing 

Ou mieux encore, l'ajouter à tout ce MovieClip il devrait être.

Pour mémoire, cependant, j'ai vraiment aimé "solution simple" de back2dos.

+0

merci, j'utilise toujours l'animation Timeline. – pixelGreaser

+0

Eh bien, c'est bon à savoir! Parfois je trouve que je suis tenté d'utiliser du code où l'animation de la timeline est mieux adaptée, c'est tout. À votre santé! – aaaidan

0
// OP's Timer-related code ommitted 
var i:int = 0; 
function countdown(e:Event) { 
    tx.text = myArray[i]; 
    i = (i+1) % myArray.length; // resets i to zero when it gets to the size of the array 
}