Flash Can';";“removeChild”;在先前引用对象之后
基本上,我有两个例程:一个是CDK冲突检查,另一个是数组的通用验证。它们都在同一个计时器事件中。有两个数组-collisionList和MasterArray,对象都在这两个数组中 首先,碰撞程序: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
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:isShape1: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);
}
}