2014-12-01 77 views
0
function addEffect() 
{ 
var thisEffect = new MyEffect; //Simple movieClip 
addChild(thisEffect); 
effectArray[0] = thisEffect; 
} 

以上工作正常。后来我删除它...下面的工作也很好。从Array删除儿童作品...有时

function removeEffect() 
{ 
    if(effectArray[0] != null) 
    { 
    removeChild(effectArray[0]); 
    } 
} 

然而,当我再次使用的功能,somtimes下翻,有时两圈后,我得到: 错误#2025:提供的DisplayObject必须是调用者的子。 奇怪的是,我使用相同的技术来添加和删除其他动画片段,并且对于其他所有内容都可以正常工作。我没有引用effectArray或其中的任何东西,除了这两个函数之外,它们都在Main.as中。

+0

当我做了一些跟踪语句,我发现,即使它从舞台上删除的对象,该对象停留在阵列内部,当我试图重复它,它试图消除同一剪辑再次,这已经不在舞台上了... effectArray = []解决了这个问题。 – randyHurd 2014-12-01 20:22:41

回答

2

这很正常。 将myEffect添加到数组时,只有对myEffect的引用存储在数组中。 而当您尝试通过数组到达该对象时,一切正常,并且引用myEffect中的数组指向每次正确对象。

但是,每次都不正确的是,是否有一个对象参考点的位置。如果它已被删除,它不能再作为目标对象的子项,所以你会得到这个错误。

你在做什么removeEffect功能是检查引用是否存在,而不是对象。如果你不从数组中移除它,那么引用总是存在的。删除对象后,还要删除参考。一切都会正常工作。

function removeEffect() 
{ 
    if(effectArray[0] != null) 
    { 
    removeChild(effectArray[0]); 
    effectArray[0] = null; 
    } 
} 
+0

谢谢。这清除了我的一切。 – randyHurd 2014-12-01 20:49:41