如何解决AS3:解决数组中的影片剪辑问题!
| 我正在使用循环来创建影片剪辑的网格。片段存储在数组“ 0”中。 这是我的代码://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循环会命中除tileArray
中的第一个checker
对象之外的所有图块。
e:
当使用trace(m);
时,我可以看到m
确实从0开始,但是循环无法执行tileArray[0].gotoAndPlay(1)
。另外,如果我在循环外放置tileArray[0].gotoAndPlay(1);
并注释掉循环,则没有瓷砖会动画。 tileArray[0].gotoAndPlay(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);
}
, 当我需要遍历整个数组时,通常使用for / each语法:
for each (var tile:checker in tileArray) {
tile.gotoAndPlay(1);
}
这并不能解释您遇到的怪异行为(我不知道,我会开始查看\“ checker \”类,但是那是个失败),但这可能使它无关紧要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。