我正在使用循环来创建影片剪辑网格。剪辑存储在数组tileArray
中
这是我的代码:
//Spawn Checkers
var i:int = new int();
var j:int = new int();
var tileArray:Array = new Array();
for (i=0; i<22; i++)
{
for (j=0; j<12; j++)
{
var tile:checker = new checker(i * 25 + 49,j * 25 + 40);
stage.addChild(tile);
tileArray.push(tile);
}
}
//Activate Checkers (TEST)
var m:int = new int();
for (m=0; m<tileArray.length; m++)
{
tileArray[m].gotoAndPlay(1);
}
我的问题是当//Activate Checkers (TEST)
代码部分运行时,它不会解决第0个元素。即在位置(49,40)创建的第一个瓷砖。如果我tileArray[0].gotoAndPlay(1);
它可以正常工作,但由于某种原因,for循环将会触及checker
中第一个tileArray
对象的每个磁贴。
E:
使用trace(m);
时,我可以看到m
确实从0开始,但循环无法执行tileArray[0].gotoAndPlay(1)
。另外,如果我将tileArray[0].gotoAndPlay(1);
放在循环之外并注释掉循环,则没有任何拼贴生成动画。 tileArray[0].gotoAndPlay(1);
在循环外部不起作用,但在内部工作 - 除非数组索引是我的迭代变量。很奇怪。
答案 0 :(得分:1)
您可以稍微简化一下代码,它可以解决问题:
//avoid the use of the **new** statement (it initialise a bunch of stuff you dont need)
var i:int;
var j:int;
var tileArray:Array = [];
for (i=0; i<22; i++)
{
for (j=0; j<12; j++)
{
//** updated ** I forgot to add the [i] for index position
tileArray[i] = new checker(i * 25 + 49,j * 25 + 40);
addChild(tileArray[i]);
}
}
//Activate Checkers (TEST)
var m:int;
for (m=0; m<tileArray.length; m++)
{
tileArray[m].gotoAndPlay(1);
}
答案 1 :(得分:1)
当我需要遍历整个数组时,我通常使用for / each语法:
for each (var tile:checker in tileArray) {
tile.gotoAndPlay(1);
}
这并不能解释你遇到的奇怪行为(我不知道,我会开始看“检查员”类,但那会fla))但它可能会使它无关紧要。