Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash Can';";“removeChild”;在先前引用对象之后_Flash_Actionscript 3 - Fatal编程技术网

Flash Can';";“removeChild”;在先前引用对象之后

Flash Can';";“removeChild”;在先前引用对象之后,flash,actionscript-3,Flash,Actionscript 3,基本上,我有两个例程:一个是CDK冲突检查,另一个是数组的通用验证。它们都在同一个计时器事件中。有两个数组-collisionList和MasterArray,对象都在这两个数组中 首先,碰撞程序: var collisions:Array = collisionList.checkCollisions(); for(var i:uint = 0; i < collisions.length; i++) 如果(i.x

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

首先,碰撞程序:

    var collisions:Array = collisionList.checkCollisions();

 for(var i:uint = 0; i < collisions.length; i++)
如果(i.x<0){ removeChild(形状1); 主阵列拼接(本,1); }

但它不起作用。它给了我一个巨大的撞击。 如果我在碰撞例程中不更改对象x,当它被任何其他函数移出屏幕时,它就会消失,一切正常

但是,即使我只是用碰撞例程触摸它(例如,如果我声明我希望它的x为20),下次发生什么事情并将其移动到x<0时,我也会得到相同的碰撞

如果我在MasterArray检查中不做任何操作,在碰撞检查中执行removeChild,它也可以正常工作

这是我在任何一种情况下都会遇到的错误:

    ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
在flash.display::DisplayObjectContainer/removeChild()中 在game2_Scene1_fla::MainTimeline/TimeCheck()中 at flash.utils::Timer/_timerDispatch() at flash.utils::Timer/tick()


谢谢

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

我认为您在第二段代码中对每个循环使用了

主阵列中的每个i都是精灵,不是吗?
您正在检查i的x位置,这似乎是正确的,但是将Shape1设置为MasterArray[i]可能会将Shape1设置为null。(您正在MasterArray中查找键为“i”的项目,它实际上是MasterArray中的项目…)

所以,当你试图删除child(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); 
     }
}
for(变量i:int=MasterArray.length-1;i>-1;i--){
形状1:Sprite=MasterArray[i];
如果(形1.x<0){
removeChild(形状1);
主阵列拼接(i,1);
}
}

事实上,removeChild(Shape1)只是,忽略之前的冲突列表-那是我清理时的垃圾。不管怎样,它都不会工作。只要我不初始化碰撞例程,它就会工作。例如,如果我将if(shape1.x<400){removeChild(shape1);MasterArray.splice(I,1);}设置为if(shape1.x<400){removeChild(shape1);MasterArray.splice(I,1);},则开始处的所有内容都将被删除。这是正确的。然而,当我与任何对象碰撞时(它们被碰撞例程移除),下一刻有一个shape1.x<400,我会得到相同的错误。我想我也需要在碰撞例程中从主数组中移除对象,但是如果它们在两个不同的数组中,我怎么能准确地做到呢?嗯,不太清楚代码顶部的代码块中发生了什么。什么是冲突列表?collisionList.removeItem()做什么?是否可能该项目已经从舞台上移除?在任何情况下,您都可以通过首先查找索引:MasterArray.indexOf(碰撞[i].object1),从该循环中的MasterArray中删除该项。这将返回主数组中项目的索引。然后可以使用该索引将其从主阵列中拼接出来。
    ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
for(var i:int=MasterArray.length-1; i>-1; i--) {
     shape1:Sprite = MasterArray[i];
     if (shape1.x < 0) { 
        removeChild(shape1); 
        MasterArray.splice(i,1); 
     }
}