AS3 Flash Builder对话文本显示

时间:2012-04-11 16:43:58

标签: actionscript-3 flash dialog flash-builder

在做了一些阅读之后,我已经了解到在AS3中不可能进行多线程处理,而且我仍然无法理解"伪造它"。但是,我正致力于在两个角色之间创建一个对话对话,并想到了一种方法,我有点怀疑。如果我不应该这样做,请纠正我>:)。

  • 我添加了一个Event.ENTER_FRAME监听器,它调用一个名为" update"的函数。

  • 然后,为了开始对话,我创建了一个MouseEvent.CLICK监听器,每次用户点击它时,它都会设置一个名为" moreDialog"的布尔值。真实。

  • 现在" moreDialog"在"更新"中设置为true。每个帧调用的方法,有一个if循环检查moreDialog是否为true,如果是,那么它将 substring 一个单词并将其放在textField中,并且之后的每一帧都会使子字符串变大1,直到单词完全显示出来,使字母的视觉效果显示为好像他们正在说话。

这是处理这个问题的最好方法吗?它可以满足我的需求,但在我开始添加更多功能时,我不确定它是否存在性能问题或任何其他问题。如果不是,最好的替代方案是什么?提前谢谢。

1 个答案:

答案 0 :(得分:2)

您的问题不是很清楚,并且听起来并不像您正在寻找与多线程相关的任何内容。

如果您的目标是以增量方式将文本添加到TextField ....

有不同的tweener类,例如TweenMaxTweener,但您可以使用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处理程序重置此方法

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