在做了一些阅读之后,我已经了解到在AS3中不可能进行多线程处理,而且我仍然无法理解"伪造它"。但是,我正致力于在两个角色之间创建一个对话对话,并想到了一种方法,我有点怀疑。如果我不应该这样做,请纠正我>:)。
我添加了一个Event.ENTER_FRAME监听器,它调用一个名为" update"的函数。
然后,为了开始对话,我创建了一个MouseEvent.CLICK监听器,每次用户点击它时,它都会设置一个名为" moreDialog"的布尔值。真实。
现在" moreDialog"在"更新"中设置为true。每个帧调用的方法,有一个if循环检查moreDialog是否为true,如果是,那么它将 substring 一个单词并将其放在textField中,并且之后的每一帧都会使子字符串变大1,直到单词完全显示出来,使字母的视觉效果显示为好像他们正在说话。
这是处理这个问题的最好方法吗?它可以满足我的需求,但在我开始添加更多功能时,我不确定它是否存在性能问题或任何其他问题。如果不是,最好的替代方案是什么?提前谢谢。
答案 0 :(得分:2)
您的问题不是很清楚,并且听起来并不像您正在寻找与多线程相关的任何内容。
如果您的目标是以增量方式将文本添加到TextField ....
有不同的tweener类,例如TweenMax或Tweener,但您可以使用Timer
轻松完成此操作使用计时器你可以使用这样的东西
private var myTextString:String = "The string you want to display 1 char at a time";
private function myButtonClickHandler(e:MouseEvent):void{
if(!timer.running){ //so you don't click twice
var timer:Timer = new Timer(1000, myTextString.length); //1000 is the delay (in ms), myString.length is the amout of times we want it to fire (once or every letter)
timer.addEventListener(TimerEvent.TIMER, timerTick);
timer.start();
}
}
这假设您有一个名为myTextField
的文本字段private function timerTick(e:TimerEvent):void{
myTextField.text += myTextString.charAt(e.currentTarget.currentCount) //using the current count to add the next char to your text field
}
您还希望使用timerComplete处理程序重置此方法