如果这个问题非常愚蠢,请原谅我,但我无法弄清楚该怎么做,这就是我问的原因。 在这里,我宣布一个小的白色方块作为一个动画片段符号(Dot),我希望在整个屏幕上的特定间隙之后生成它。 因此,当我在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);
}
}
答案 0 :(得分:1)
循环永远不会完成,因为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);
}