0

Flash/AS3 新手在这里。

我正在尝试逐字母显示文本(效果很好)。但是,我希望动画在每次遇到句号/句子结尾时延迟约 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 只是我们在显示文本时所处的位置,所以我们可以跟踪它。

我猜这个问题有一个简单的解决方案,也许使用 Timer EventHandler?

感谢任何人提供的任何帮助,谢谢!

4

2 回答 2

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

于 2013-08-29T19:53:00.623 回答
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
    }
}
于 2013-08-30T14:11:11.440 回答