AS3:解决数组中的影片剪辑问题!

时间:2011-05-28 01:07:54

标签: arrays actionscript-3 loops indexing

我正在使用循环来创建影片剪辑网格。剪辑存储在数组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);在循环外部不起作用,但在内部工作 - 除非数组索引是我的迭代变量。很奇怪。

2 个答案:

答案 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))但它可能会使它无关紧要。

相关问题