[英]AS3 - Change Text Before Run The Function
我需要制作一个加载屏幕。 但是Flash不会逐行读取代码。 如何在运行其他功能之前更改文本框文本?
我的代码:
TextBox.text = "Processing...";
Process();
范例:
newMap.Mytxt.textColor = 0x00FF00;
newMap.Mytxt.text = "Processing...";
DefineMap(Number(newMap.newX.text),Number(newMap.newY.text));
trace(map);
在我的示例中:程序创建地图。 但我想在创建地图之前显示“正在处理”文本。 该代码不起作用。
实际上,您的问题不在于Flash逐行运行。 实际上,它确实逐行运行,但是您的问题是您希望在运行函数之前先看到文本更改。 请参阅更改文本与更改文本不同。 您的代码实际上更改了文本,但尚未通过eventDispatcher更改界面。 如果您在SDK 3.6A或更高版本上运行,则可以在屏幕更新后侦听afterChange事件并调用函数。
编辑:您的代码“不起作用”,因为由于函数的执行速度如此之快,因此在完成地图操作之前,它不会给屏幕时间更新为“正在处理”的时间,这使得屏幕看起来好像已经仅更新一次。
编辑2:这是一个工作代码(注意:由于处理过程太快,您只会看到“ Waiting ...”消息):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
// Function that starts everything
private function changeValue():void{
// Add Listener to the label to wait the screen to be updated BEFORE updating the text.
this.status.addEventListener(Event.RENDER, this.changed);
// Update the text
this.status.text = "Wait...";
}
private function changed(e:Event):void{
// Make sure to remove the eventListener to not cause infinite loop.
this.status.removeEventListener(Event.RENDER, this.changed);
// Make new change.
this.status.text = "Done";
}
]]>
</mx:Script>
<mx:Button x="221" y="185" label="Change it!" click="changeValue()"/>
<mx:Text id="status" x="395" y="250" text="Text"/>
</mx:Application>
您在Process()函数中到底在做什么? 您永远不要但永远不要阻塞处理大量任务的主线程,因为它会阻塞您的UI。 始终将这些计算委派给后台工作人员,或使用某种Enter frame事件逐步执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.