2010-05-11 3 views
0

Моя текстовая анимация работает отлично, но не повторяется. Как мне это повторить? Извините, я не знаю Flash, что хорошо, но я просто хочу, чтобы это игра снова и снова. Благодарю.повторить текстовую анимацию, 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(); 

Я попробовал этот

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

ответ

2

простое решение:

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

но sharvey, решение которого является signifficantly лучше. было бы работать так:

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

'первый запускается, но показывает null ref, второй совершенен. Спасибо – pixelGreaser

3

Вместо сдвига() ИНГ вещи из вашего массива, держать индекс вы на (0 в первом) и приращение его в обратный отсчет времени, по модулю длины массив.

+0

if (++ myArray.length% 10 == 0) Я пробовал это, но он сказал, что текст должен быть не нулевым. У вас есть пример того, как это будет работать. – pixelGreaser

+1

, откуда приходит 10, в этом массиве, кажется, всего 7 слов. Также вы не можете изменить свойство array.length. – sharvey

1

Что sharvey означает что-то похожее на это:

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(); 

Мы вычитаем 1 из tm.currentCount использовать счетчик в качестве индекса массива (0 основе), затем используйте modulo (%) для «loop/constrain» count для длины массива. Кроме того, таймер теперь работает «навсегда».

Мы все говорили то же самое по-разному :)

+0

Это отлично работает, я получаю его сейчас. – pixelGreaser

1

Эй, я не хочу быть большой Pooper партии, но не будет что-то вроде этого будет лучше решить с помощью Timeline Флэша? То есть создать анимацию цикла в самой Flash? Таким образом, вы просто экспортируете его в actioncript и добавите анимацию в качестве своего ребенка в свой код.

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

Или еще лучше, добавить его в любой MovieClip она должна быть в.

Для записи, хотя, мне очень понравилось «простое решение» back2dos'S.

+0

спасибо, я по-прежнему использую анимацию Timeline. – pixelGreaser

+0

Хорошо, что это хорошо знать! Иногда я нахожу, что у меня возникает соблазн использовать код, в котором анимация временной шкалы лучше всего подходит, и все. Ура! – 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 
} 
Смежные вопросы