之前引用对象后无法“removeChild”

时间:2010-10-29 01:47:45

标签: flash actionscript-3

基本上,我有两个例程:一个是CDK冲突检查,另一个是数组的通用验证。他们都在同一个Timer事件中。有两个数组 - collisionList和MasterArray,对象在两个数组中。

首先,碰撞程序:

    var collisions:Array = collisionList.checkCollisions();

 for(var i:uint = 0; i < collisions.length; i++)

{var firstShape:Sprite = collisions [i] .object1;

if(firstShape.name ==“Obj1”){
    碰撞[i] .object1.x = -20;     collisionList.removeItem(碰撞[I] .object1);    }         }

然后我有:

     for each(var i in MasterArray) {
     Shape1:Sprite = MasterArray[i];

if(i.x&lt; 0){   removeChild之(Shape1);    MasterArray.splice(这一点,1);   }

     }

但它不起作用。它给了我一个巨大的崩溃。 如果我没有在碰撞程序中更改对象x,那么当它被任何其他功能移出屏幕时,它就会消失,一切都很好。

然而,即使我只是用碰撞程序触摸它(例如,如果我声明我希望它的x在20处),下次发生某些事情并将其移动到x&lt; 0,我得到同样的崩溃。

如果我没有对MasterArray检查做任何事情并在碰撞检查中执行removeChild,它也可以正常工作。

这是我遇到的错误:

    ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

at flash.display :: DisplayObjectContainer / removeChild()  在game2_Scene1_fla :: MainTimeline / TimeCheck()  在flash.utils :: Timer / _timerDispatch()  在flash.utils :: Timer / tick()

谢谢!

2 个答案:

答案 0 :(得分:0)

collisionList.removeChild(Shape1)是一个问题imho:Shape1:Sprite = MasterArray[i];真的是collisionList的孩子吗?什么类型是collisionList

答案 1 :(得分:0)

我认为你在第二块代码中使用来解决每个错误。

MasterArray 中的每个 i 都是精灵,不是吗? 您正在检查i的x位置,这似乎是正确的,但将Shape1设置为MasterArray [i]可能将Shape1设置为null。 (你正在使用键'i'在MasterArray中寻找一个项目,它实际上是MasterArray中的一个项目......)

那么你正在尝试removeChild(null),一切都在爆炸。

您可能希望将循环更改为常规 for 循环。像这样:

for(var i:int=MasterArray.length-1; i>-1; i--) {
     shape1:Sprite = MasterArray[i];
     if (shape1.x < 0) { 
        removeChild(shape1); 
        MasterArray.splice(i,1); 
     }
}