2011-12-01 45 views
0

我想直接从用户交互影片剪辑删除儿童的,但它在说“所提供的索引超出范围” - 然而,因为它没有我必须失去了一些东西似乎任何事情都是超越界限的。这是我的代码:闪光AS3提供的索引超出范围

Circle.as:

for (var i=0; i<3;i++){ //this number should be based on the number of children found in the XML 
      var wedge:Wedge = new Wedge(wedgeHolderRef, i, cr,cScale); 
     } 

Wedge.as:

public function Wedge(wedgeHolderRef, wedgeNum:int, cr:int = 3, cScale:int = 5) 
{ 
    var wedge:Sprite = new Sprite(); 
    var wedgeClip:MovieClip = new MovieClip(); 
    wedgeClip.addChild(wedge); 
    wedgeHolderRef.addChild(wedgeClip); 
} 

private function wedgeClickHandler(wedgeRef):void 
{ 
    var wedgeChildren = wedgeHolderRef.numChildren; 
    for (var i=0; i<wedgeChildren; i++) 
    { 
     var wedgeClip = wedgeHolderRef.getChildAt(i); 
     if (i != wedgeChildren-1){ 

     } else { 
      deactivateCircle(); 
     } 
    } 
} 

private function deactivateCircle() 
{ 
    var wedgeChildren = wedgeHolderRef.numChildren; 
    for (var i=0; i<wedgeChildren; i++){ 
     //trace (i + "|" + wedgeHolderRef.getChildAt(i).wedgeNum); 
     wedgeHolderRef.removeChildAt(i); //Here is where I get the error 
    } 
} 

回答

1

当你删除的孩子,你的指数不占儿童减少的数量。

一个迭代后,numChildren的下降1,但你的指数仍根据原来的孩子数。

while (wedgeHolderRef.numChildren > 0) 
    wedgeHolderRef.removeChildAt(0); 
+0

啊,当然。谢谢。 – mheavers

2

你不应该从0迭代到你储存在那里,因为i将继续走高的儿童人数而不是实际的儿童人数。每次您删除一个孩子时,孩子的数量都会减少。

而是做到这一点:

while(wedgeHolderRef.numChildren) 
{ 
    wedgeHolderRef.removeChildAt(0); 
}