AS3 - 未检索正确的项目

时间:2012-08-25 16:22:42

标签: actionscript-3 flash actionscript

在这段代码中,我正在检查游戏中的关卡是否已解锁。数组“级别”包含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);
                }
            }
        }

2 个答案:

答案 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”元素。