0

在这部分代码中,我正在检查游戏中的关卡是否已解锁。数组“levels”包含 12 个影片剪辑,“levelsUnlocked”是用户达到的最高级别。因此,使用此代码,我正在检查级别位置是否高于 levelsUnlocked 值,如果是,则将其移动到第 2 帧(即锁定图像),如果较低,则将其保持在第 1 帧。

我的问题是:

在 else 语句中,当我引用levels[levels.length - i] 时,它不会将其视为Movieclip,但如果我将其称为levels[1] 或levels[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);
                }
            }
        }
4

2 回答 2

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
于 2012-08-25T16:43:28.673 回答
1

您可以使用MovieClip(levels[levels.length-i]).gotoAndStop(2);

编辑:
回答您的问题:
您正在尝试在循环时从数组末尾访问数组元素。
someArray[someArray.length-i] 给出数组的“last - i”元素。

于 2012-08-25T16:27:02.310 回答