2012-08-25 33 views
0

在这部分代码中,我正在检查游戏中的某个级别是否已解锁。数组“级别”包含12个Movieclips,“levelsUnlocked”是用户达到的最高级别。因此,通过这段代码,我正在检查水平位置是否高于levelsUnlocked值,如果是,它会将其移动到第2帧(这是锁定的图像),如果更低,则将其保留在第1帧。AS3 - 未检索到正确的项目

我的问题是:

else语句,当我指的是水平[levels.length - 我],它并没有把它当作一个影片剪辑,但是如果我把它称为水平[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); 
       } 
      } 
     } 

回答

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

+0

我试过并收到“TypeError:错误#1009:无法访问空对象引用的属性或方法”。 –

+0

你为什么倒退?你为什么不只是:levels [i] .gotoAndStop(2); – Zhafur

+0

哦......呃。有效。 –