0

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

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

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

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

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

4

1 回答 1

2

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

如果您的目标是逐步将文本添加到 TextField....

有不同的补间类,例如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

于 2012-04-11T20:10:01.790 回答