Actionscript 3 当我执行这个特定循环时,Flash挂起

Actionscript 3 当我执行这个特定循环时,Flash挂起,actionscript-3,flash,Actionscript 3,Flash,如果这个问题很愚蠢,请原谅我,但我不知道该怎么办,这就是我问这个问题的原因。 在这里,我声明了一个小的白色正方形作为movieclip符号(点),我希望在整个屏幕上的特定间隙后生成它。 所以,当我在FlashCS6上执行这个(测试它)代码时,它挂起。在此之后,我将被迫结束该计划,不再做任何进一步的事情 import flash.ui.*; stop(); Mouse.hide(); var ctX:int = 0,ctY:int = 0,done:Boolean = false; var bas

如果这个问题很愚蠢,请原谅我,但我不知道该怎么办,这就是我问这个问题的原因。 在这里,我声明了一个小的白色正方形作为movieclip符号(点),我希望在整个屏幕上的特定间隙后生成它。 所以,当我在FlashCS6上执行这个(测试它)代码时,它挂起。在此之后,我将被迫结束该计划,不再做任何进一步的事情

import flash.ui.*;
stop();
Mouse.hide();
var ctX:int = 0,ctY:int = 0,done:Boolean = false;
var base:Object = MovieClip(root);
this.addEventListener(Event.ENTER_FRAME, eFrame);
function eFrame(event:Event):void
{
    while (done == false)
    {
        var dots:Dot = new Dot  ;
        dots.x +=  (50 * ctX);
        dots.y +=  (50 * ctY);
        ctX++;
        if (ctX == 11)
        {
            ctX = 0;
            ctY++;
        }
        else if (ctX == 11 && ctY == 10)
        {
            done = true;
            break;
        }
        stage.addChild(dots);
    }
}
先谢谢你。

循环永远不会结束,因为
done=true
的条件是
ctX==11
,但是
ctX==11
在第一个条件下导致
ctX=0

if (ctX == 11) // when ctX is 11
{
    ctX = 0; // ctX is reset to 0
    ctY++;
}
else if (ctX == 11 && ctY == 10) // so you will never have ctX=11 here
{
    done = true;
    break; // (Tip: you don't need `done` since `break` exits the loop)
}
您可以通过交换条件来解决这个问题,但是我认为使用
while
循环是不必要的复杂和脆弱。为什么不使用两个for循环:

for (var ctX:int = 0; ctX < 11; ctX++) {
    for (var ctY:int = 0; ctY < 11; ctY++) {
        var dots:Dot = new Dot();
        dots.x = (50 * ctX);
        dots.y = (50 * ctY);
        stage.addChild(dots);
    }
}
for(var-ctX:int=0;ctX<11;ctX++){
对于(变量ctY:int=0;ctY<11;ctY++){
变量点:点=新点();
dots.x=(50*ctX);
点y=(50*ctY);
阶段。添加儿童(dots);
}
}
这是更清楚,更不脆弱,因为循环是固定长度

你甚至可以用一个for循环和一点数学来做,但是你失去了一些清晰度:

for (var i:int = 0; i < 11 * 11; i++) {
    var dots:Dot = new Dot();
    dots.x = (50 * (i % 11));
    dots.y = (50 * int(i / 11));
    stage.addChild(dots);
}
for(变量i:int=0;i<11*11;i++){
变量点:点=新点();
dots.x=(50*(i%11));
dots.y=(50*int(i/11));
阶段。添加儿童(dots);
}

将一些
跟踪
语句放在那里,以便您可以看到(ctX和ctY的)值是什么,如果它们遵循您想要的进度。非常感谢。非常感谢您花时间回答。我不认为这也应该在回车框中运行。