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?
我感谢任何人提供的任何帮助,谢谢!
发布于 2013-08-29 19:53:00
我认为以下内容将有助于编写您想要的代码:
String.split() --这种方法将帮助您将段落分割成句子,并将它们存储在数组中。(请记住,并不是所有的句点都是句号,所以您可能需要使用一些正则表达式来处理特殊情况,比如将它们用作省略号或小数):
例如:
textToDisplay.split('.');US/FlashPlatform/reference/actionscript/3/String.html#split()
Array.shift() -这个方法将返回数组中的第一个元素,然后从数组中删除它。如果将句子存储在数组中,则可以继续调用shift()以获得需要显示的下一个句子:
例如:
var sentences:Array = textToDisplay('.');
var next_sentence:String = sentences.shift();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());
}US/FlashPlatform/reference/actionscript/3/flash/utils/Timer.html
发布于 2013-08-30 14:11:11
不需要跟踪位置,因为计时器中有一个计数器。
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
}
}https://stackoverflow.com/questions/18517420
复制相似问题