Actionscript 3 AS#3数组未清除其内容

Actionscript 3 AS#3数组未清除其内容,actionscript-3,flash,actionscript,flash-cs5,Actionscript 3,Flash,Actionscript,Flash Cs5,首先,我会简单解释: 我有两个数组,第一个数组:holder,第二个数组:Clips。 第一个数组是作为网格模式的动态空框,通过一个循环将每个项目推到一个数组中,并添加到stage//中,仅用于位置x,y 第二个阵列:剪辑是动态加载的SWF电影,总共10部 这些加载的SWF片段是“addChild”到Holder数组中的,因此这些片段将处于网格模式中,同时推入数组片段中,例如,参考示例 Clips[1].x = 50 ; // this works fine 所以我知道我的剪辑在那

首先,我会简单解释:

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

第二个阵列:剪辑是动态加载的SWF电影,总共10部 这些加载的SWF片段是“addChild”到Holder数组中的,因此这些片段将处于网格模式中,同时推入数组片段中,例如,参考示例

     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] ) ;        
      }
var len:int=Clips.length;
对于(变量i:int=0;i
我也尝试过拼接,但结果相同,要么抛出错误,要么什么也不做,无论哪种方式,我的项目都不会被删除/删除

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


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

试试这个。如果它起作用,那就意味着你试图从错误的父母那里删除孩子。在这种情况下,您应该会收到运行时错误。如果下面的代码没有引起错误,但屏幕上仍然有内容,那么您的代码在某个地方复制了内容。如果执行加载的代码被调用两次,就会发生这种情况

      var len:int = Clips.length;
      for( var i:int = 0; i < len; i++ ) {
      Clips[i].parent.removeChild(Clips[i]);        
      }
var len:int=Clips.length;
对于(变量i:int=0;i
试试这个。如果它起作用,那就意味着你试图从错误的父母那里删除孩子。在这种情况下,您应该会收到运行时错误。如果下面的代码没有引起错误,但屏幕上仍然有内容,那么您的代码在某个地方复制了内容。如果执行加载的代码被调用两次,就会发生这种情况

      var len:int = Clips.length;
      for( var i:int = 0; i < len; i++ ) {
      Clips[i].parent.removeChild(Clips[i]);        
      }
var len:int=Clips.length;
对于(变量i:int=0;i
为防止出现错误,请修改您的条件:

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”

..我还建议使用向量,而不是数组-您可以将任何类型的值放入数组中,因此,如果您将非DisplayObject放入其中,则在尝试从阶段中删除if时,将出现错误:

var clips:Vector.<DisplayObject> = new Vector.<DisplayObject>();
除了上面笨重的声明之外,这个函数在大多数方面都与数组完全相同(如push、splice、带有方括号表示法的引用元素,如
clips[0]
等),但只允许您在其中放入特定类型的对象/变量-在本例中为DisplayObject。如果你试着在里面放一个“int”,它不会让你——它也会运行得更快!它们在任何情况下都是值得使用的,但在这里,它们可能会有帮助,以防您在没有意识到的情况下将其他东西放入该数组(我已经做了很多次)


希望这有帮助

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

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”

..我还建议使用向量,而不是数组-您可以将任何类型的值放入数组中,因此,如果您将非DisplayObject放入其中,则在尝试从阶段中删除if时,将出现错误:

var clips:Vector.<DisplayObject> = new Vector.<DisplayObject>();
除了上面笨重的声明之外,这个函数在大多数方面都与数组完全相同(如push、splice、带有方括号表示法的引用元素,如
clips[0]
等),但只允许您在其中放入特定类型的对象/变量-在本例中为DisplayObject。如果你试着在里面放一个“int”,它不会让你——它也会运行得更快!它们在任何情况下都是值得使用的,但在这里,它们可能会有帮助,以防您在没有意识到的情况下将其他东西放入该数组(我已经做了很多次)


希望这有帮助

我通常不使用大写字母,只是举个例子。我会试试你的方法,然后再打给你,谢谢。好的,让我知道你是怎么做的。我对上一个建议做了一点修改,因为它不需要条件的第一部分,希望您及时注意(如果不需要,请快速更改!)您在右侧的页面上的错误,这是我的错误,无论我如何处理“参数child必须非null”,或者不能是父项的子项。。我理解他们的意思,我假设有其他存储位置OK,在调用removeChild之前放入trace('clip is:'+Clips[i]),让我知道它在损坏的一个上输出了什么。如果您查找,我已经修改了条件以考虑空值(但这不是一个解决方案,因为它们为什么是空的!)这可以工作两次,然后抛出错误:无法访问空对象引用的属性或方法。我想我必须重新思考我通常不使用大写字母,举个例子。我会试试你的方法,然后再打给你,谢谢。好的,让我知道你是怎么做的。我对上一个建议做了一点修改,因为它不需要条件的第一部分,希望您及时注意(如果您不需要,请快速更改!)您在右侧的页面上的“这是我的错误,无论我如何处理此”参数