在这段代码中,我正在检查游戏中的关卡是否已解锁。数组“级别”包含12个Movieclips,“levelsUnlocked”是用户达到的最高级别。因此,使用此代码,我正在检查水平位置是否高于levelsUnlocked值,如果是,则将其移动到第2帧(这是锁定图像),如果较低,则将其保持在第1帧。
我的问题是:
在else语句中,当我引用级别[levels.length - i]时,它不会将其视为Movieclip,但如果我将其称为级别[1]或级别[3],它确实。有人能告诉我为什么会这样吗?
function unlockLevels():void
{
for (var i:int = 0; i < levels.length; i++)
{
if (levels.length - i > levelsUnlocked)
{
levels[levels.length - i].gotoAndStop(2);
}
else
{
levels[levels.length - i].gotoAndStop(1);
}
}
}
答案 0 :(得分:4)
数组长度为您提供如下数组的长度:
var a:Array = [0,1,2,3,4]
var length:int = a.length
trace(a)
//=> 5
在循环的第一次迭代中,你的int为零。
a[a.length - 0]
// a[5] == undefinded
答案 1 :(得分:1)
您可以使用MovieClip(levels[levels.length-i]).gotoAndStop(2);
编辑:
回答你的问题:
您正在尝试在循环时从数组末尾访问数组元素
someArray [someArray.length-i]给出了数组的“last-i”元素。