基本上,我有两个例程:一个是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()
谢谢!
答案 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);
}
}