0

首先,我将简要说明:

我有 2 个数组,第一个 Array:holder,第二个 Array:Clips。第一个数组是作为网格模式的动态空框,通过循环将每个项目推入数组并添加到舞台//仅用于位置 x,y

第二个数组:Clips是动态加载的SWF电影,一共10个这些加载的SWF剪辑是“addChild”到Holder Array中的,所以这些剪辑会在网格模式中同时被推入数组Clips中,供参考示例

     Clips[1].x = 50 ; // this works fine 

所以我知道我的剪辑在那里,正确引用。但是 icant 似乎做的是从数组中删除所有内容:剪辑

      var len:int = Clips.length;
      for( var i:int = 0; i < len; i++ ) {
      this.removeChild( Clips[i] ) ;        
      }

我也尝试过拼接,结果相同,只是要么抛出错误,要么什么都不做,无论哪种方式,我的项目都没有删除/删除。

简单的解释方法我在一个数组中加载 15 个项目,每次按下按钮时我都想清除该数组并重新填充另外 15 个项目,这永远每 10 秒发生一次。

我可以重新填充没问题,它将继续在旧内容上加载更多内容,但我希望清除旧内容

4

2 回答 2

2

为防止出现错误,请修改您的条件:

if(this.contains(Clips[i]){
    this.removeChild(Clips[i]);
}

如果它仍然不起作用,您可能从错误的剪辑中删除,即不是“这个” - 试试这个:

if(Clips[i] != null && Clips[i].parent != null){
        Clips[i].parent.removeChild(Clips[i]);
    }

Clips[i] != null添加了部分条件以检查以下评论中出现的错误)

这将检查剪辑是否指定了父级(如果有,则它在另一个剪辑内)并专门从该剪辑中删除它,而不仅仅是“this”。

..而且我还建议使用 Vector,而不是 Array - 您可以将任何类型的值放入数组中,因此如果您将非 DisplayObject 放入其中,当您尝试删除 if 时会出现错误从舞台:

var clips:Vector.<DisplayObject> = new Vector.<DisplayObject>();

而不是:

var clips:Array = [];

除了上面庞大的声明之外,这个函数在大多数方面都与数组完全一样(推送、拼接、使用方括号表示法的引用元素等函数clips[0]),但只会让您将某些类型的对象/变量放入其中 - 在在这种情况下,DisplayObject。如果你试图在里面放一个'int',它不会让你 - 它也运行得更快!它们在任何情况下都值得使用,但在这里它们可能会有所帮助,以防万一您在没有意识到的情况下将其他东西放入该数组中(我已经做过很多次了)。

希望这可以帮助!

于 2013-03-27T13:14:20.473 回答
1

尝试这个。如果它有效,则意味着您试图将孩子从错误的父母那里移除。在这种情况下,您应该收到运行时错误。如果以下代码不会导致错误但屏幕上仍有内容,那么您的代码在某处复制了内容。如果执行加载的代码被调用两次,就会发生这种情况。

      var len:int = Clips.length;
      for( var i:int = 0; i < len; i++ ) {
      Clips[i].parent.removeChild(Clips[i]);        
      }
于 2013-03-27T13:10:30.597 回答