【问题标题】:AS3 Flash Builder Dialog Text ShowingAS3 Flash Builder 对话框文本显示
【发布时间】:2012-04-11 16:43:58
【问题描述】:

阅读后,我了解到多线程在 AS3 中是不可能的,我仍然无法理解“伪造它”的想法。但是,我正在努力创建两个角色之间的对话对话,并考虑了一种我有点怀疑的方法。如果这不是我应该做的,请纠正我>:)。

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

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

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

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

【问题讨论】:

  • 您能否详细说明您正在尝试做什么?从你现在写的内容来看,我不太清楚。
  • 我不确定多线程是如何在这里发挥作用的。我不太明白这个问题,但似乎这应该是基于事件的,不需要循环。

标签: actionscript-3 flash dialog flash-builder


【解决方案1】:

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

如果您的目标是逐步将文本添加到 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

【讨论】:

  • 是的,很抱歉我没有提及多线程。我的意思是,如果我像你上面提到的那样使用计时器,整个程序会被搁置以处理 timerTick 吗?假设我想在显示字符串时渲染图像或做其他事情,这可能吗?
  • 不,定时器是异步的。这不会被阻塞。
  • 注意:使用String.concat() 比使用+= 产生更好的性能!
猜你喜欢
  • 2016-12-21
  • 2011-01-28
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多