AS#3阵列未清除其内容

时间:2013-03-27 12:40:10

标签: actionscript-3 flash actionscript flash-cs5

首先,我将简要解释一下:

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

第二个数组:剪辑是动态加载的SWF电影,10个在一起 这些加载的SWF剪辑是“addChild”到Holder数组中,因此这些剪辑将以网格模式并同时推入数组Clips,作为参考示例

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

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

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

我尝试过拼接以及相同的结果只是抛出错误或什么都不做,无论是我的项目都没有删除/删除上演。

简单的方法来解释我在一个数组中加载了15个项目,每次按下按钮我想要清除该数组并重新填充另外15个项目,这种情况每10秒发生一次...

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

2 个答案:

答案 0 :(得分:2)

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

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

如果它仍然不起作用,你可能会从错误的剪辑中移除,即不是'this' - 试试这个:

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

Clips[i] != null条件的一部分已添加,以检查下面评论中是否出现错误)

这会检查剪辑是否指定了父级(如果有的话,它位于另一个剪辑内)并将其从该剪辑中删除,而不仅仅是'this'。

..我还建议使用Vector而不是数组 - 你可以将任何类型的值放入数组中,所以如果你把非DisplayObject放在那里你会在尝试时遇到错误从舞台上移除:

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

而不是:

var clips:Array = [];

除了上面的庞大声明之外,这个函数在大多数方面都与数组完全相同(函数如push,splice,带有方括号表示法的引用元素,例如clips[0]等),但只会让你放置某些类型其中的对象/变量 - 在本例中为DisplayObject。如果你试图把'int'放在那里,它就不会让你 - 它运行得更快!它们在任何情况下都值得使用,但是在这里它们可能会有所帮助,以防你在没有意识到的情况下将其他东西放入该阵列中(我已经做了很多次)。

希望这有帮助!

答案 1 :(得分:1)

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

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