Flex Mobile validateNow()无法正常工作

时间:2013-05-25 18:29:19

标签: flex mobile stage

我有一个漫长而忙碌的for循环,它应该迭代地在舞台上添加元素。由于执行整个循环需要几秒钟(i = 1:N),我只想在每个循环中刷新阶段,以便在循环到达其最终点(N)之前显示输出。每次迭代都应该在下一次迭代开始之前添加一个可显示的元素。 为此,我写了以下

for(var i:int = 0; i < 280; i++){
 addElement(...);
 validateNow();
} 

但它不像我想要的那样工作。有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

你需要将这个冗长的工作分开,以便它可以在多个帧上发生。代码执行时,Flash / Flex不会更新屏幕。请查看Flash的elastic race track以了解原因。 Flex组件生命周期也会在其上添加另一层。顺便说一句,调用validateNow()可能计算成本很高,可能会使你的循环需要更长时间:)

有许多方法可以解决循环中的工作。

以下是使用callLater()的简单示例:

private function startWorking():void
{
    // create a queue of work (whatever you are iterating over)
    // in your loop you're counting to 280, you could use a
    // simple counter variable here instead
    var queue:Array = [ a, b, c];
    callLater(doWork, [ queue ] );
}

private function doWork(workQueue:Array):void
{
    var workItem:Object = workQueue.shift();
    // do expensive work to create the element to add to screen
    addElement(...);
    if (workQueue.length > 0)
        callLater(doWork, workQueue);
}

您可能希望一次处理多个项目。您也可以使用ENTER_FRAME事件而不是callLater()执行相同的操作(实质上,这是callLater()正在执行的操作)。

<强>参考