2013-08-29 4 views
0

Flash/AS3 noobie здесь.Задержка анимация внешнего вида при появлении сообщения

Я пытаюсь отображать текст по буквам (который отлично работает). Тем не менее, я хочу, чтобы анимация задерживала ~ 500 миллисекунд каждый раз, когда встречается период/конец предложения. До сих пор соответствующая часть моего кода выглядит следующим образом:

public function displayLoop(e:Event):void 
    { 
     if (pos == textToDisplay.length - 1) 
     { 
      stop(); 
      return; 
     } 

     firstParagraph.appendText(textToDisplay.charAt(pos)); 
     if (textToDisplay.charAt(pos) == String.fromCharCode(46)) 
     { 
      //here's where I want to delay?? 
     } 
     pos++; 
    } 

В этом случае firstParagraph это имя моего динамического объекта текста, textToDisplay является строка текста, который будет отображаться письмо-на-письма , и pos - это просто позиция, в которой мы находимся при отображении текста, поэтому мы можем отслеживать его.

Я предполагаю, что есть простое решение этой проблемы, возможно, с помощью таймера EventHandler?

Я ценю любую помощь, которую может предложить любой, спасибо!

+0

показать еще код. в частности, все, что связано с таймером –

+0

У меня нет таймера, мой вопрос задавался вопросом, является ли это лучшим путем для достижения эффекта, который я ищу. Прошу прощения за путаницу. – Chris

+0

При размещении вопроса на SO старайтесь держать его в соответствии, название этого вопроса задает нечто совершенно иное, чем то, что вы только что просили в комментарии выше. Также лучшие вопросы о маршруте/практике обычно недовольны, потому что на это нет реального ответа, поскольку это основано на мнениях. –

ответ

1

Я думаю, что следующий будет полезно для кодирования до того, что вы хотите:

String.split() - Этот метод поможет вам разделить ваш пункт в предложениях и хранить их в массиве. (Имейте в виду, что не все периоды являются полными остановками, поэтому, возможно, вам придется использовать некоторые регулярные выражения для рассмотрения особых случаев, например, когда они используются как элипсис или десятичные числа.):

например.

textToDisplay.split('.'); 

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.html#split()

Array.shift() - Этот метод вернет вам первый элемент в массиве, а затем удалить его из массива. Если у вас есть ваши предложения, хранящиеся в массиве, вы можете продолжить вызов shift(), чтобы получить следующее предложение, которое должно быть показано:

например.

var sentences:Array = textToDisplay('.'); 
var next_sentence:String = sentences.shift(); 

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#shift()

Timer - Этот объект, как вы упомянули, поможет вам создать те интервалы задержки между прилагая предложения:

например

var myTimer:Timer = new Timer(1000, sentences.length); 
myTimer.addEventListener(TimerEvent.TIMER, timerHandler); 
myTimer.start(); 

function timerHandler(e:Event) { 
    firstParagraph.appendText(sentences.shift()); 
} 

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html

0

Нет необходимости отслеживать положение с таймером имеет счетчик, встроенный в него.

import flash.text.TextField; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

var textToDisplay:String = 'AB.CDE.FGHI.JKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 
var tf:TextField = new TextField() 
tf.width = 500 
tf.wordWrap = true 
tf.height = 400 
addChild(tf) 
var timer:Timer = new Timer(100) 
timer.addEventListener(TimerEvent.TIMER, onTimer) 
timer.start() 
function onTimer(e:TimerEvent):void{ 
    timer.delay = 100 
    tf.appendText(textToDisplay.slice(timer.currentCount-1,timer.currentCount)) 
    if(timer.currentCount == textToDisplay.length){ 
     timer.stop() 
    } 
    if(textToDisplay.slice(timer.currentCount-1,timer.currentCount) == '.'){ 
     timer.delay = 500 
    } 
} 
Смежные вопросы