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

Flash hangs when I execute this particular loop

如果这个问题很愚蠢,请原谅我,但我不知道该怎么做,这就是我问这个问题的原因。 在这里,我将一个小的白色方块声明为动画片段符号(点),我希望在整个屏幕上的特定间隙后生成它。 因此,当我在 Flash CS6 上执行此(测试)代码时,它会挂起。之后我将被迫结束程序而不做任何进一步的事情。

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);
    }
}

提前谢谢你。 I have attached a screenshot of the situation.

循环永远不会结束,因为 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 循环和一点数学来完成它,但你会失去一些清晰度:

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);
}