我需要制作一个加载屏幕。但Flash不会逐行读取代码。如何在运行另一个函数之前更改文本框文本?
我的代码:
TextBox.text = "Processing...";
Process();
示例:
newMap.Mytxt.textColor = 0x00FF00;
newMap.Mytxt.text = "Processing...";
DefineMap(Number(newMap.newX.text),Number(newMap.newY.text));
trace(map);
在我的例子中:程序创建一个地图。但我想在创建地图之前显示“处理”文字。此代码无效。
答案 0 :(得分:0)
实际上,你的问题不在于逐行运行Flash。实际上,它确实逐行运行,但问题是您希望在运行函数之前看到文本更改。 请参阅更改文本与更改文本不同。您的代码实际上更改了文本,但尚未通过eventDispatcher更改界面。如果你在SDK 3.6A或更高版本上运行,你可以听取afterChange事件并在屏幕更新后调用你的函数。
编辑:你的代码“不起作用”,因为你的函数执行速度太快,它不会让屏幕时间在地图完成之前更新为“处理”,这使它看起来像屏幕只更新了一次。
编辑2:这是一个有效的代码(注意:您只能看到“等待...”消息的一瞥,因为过程太快了):
<?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>
答案 1 :(得分:0)
你在Process()函数中究竟做了什么?您永远不应该从不使用处理密集型任务来阻止主线程,因为它会阻止您的UI。始终将这些计算委派给后台工作人员或使用某种输入框架事件来分步执行。