Actionscript 3 当我执行这个特定循环时,Flash挂起
如果这个问题很愚蠢,请原谅我,但我不知道该怎么办,这就是我问这个问题的原因。 在这里,我声明了一个小的白色正方形作为movieclip符号(点),我希望在整个屏幕上的特定间隙后生成它。 所以,当我在FlashCS6上执行这个(测试它)代码时,它挂起。在此之后,我将被迫结束该计划,不再做任何进一步的事情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
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的)值是什么,如果它们遵循您想要的进度。非常感谢。非常感谢您花时间回答。我不认为这也应该在回车框中运行。