我正在尝试像鸡入侵者一样构建游戏,我得到了这个错误:
ArgumentError:错误#2025:提供的DisplayObject必须是子级 来电者。在flash.display :: DisplayObjectContainer / removeChild() at superstudent7_fla :: MainTimeline / moveBullet()
当我的太空飞船射击时会出现这个问题。
要解决这个问题,我需要知道两件事:
我的子弹被定义为MovieClip
s,而且他们不在舞台上......
所以我带他们到这个舞台:
function shooting(e:Event):void {
var Bullet:bullets = new bullets(); // bullets is class name of my movieClip
...
...
...
addChild(Bullet);
Bullet.addEventListener(Event.ENTER_FRAME,moveBullet);
}//End of shooting
我需要知道它是否可以像这样在舞台上添加子弹? 还是有另一种方式?
这是使子弹移动的代码:
function moveBullet(e:Event):void {
e.target.y -=10;
for(var i=0;i<enemy.numChildren;i++) {
if(e.target.hitTestObject(enemy.getChildAt(i))) {
countHits[i]=countHits[i]+1;
e.target.removeEventListener(Event.ENTER_FRAME,moveBullet);
removeChild(MovieClip(e.target)); //here is the problem
...
....
....
}//End if
}//End for
......
.....
}//End of moveBullet
敌人 - 是所有敌人的容器(movieClips)
答案 0 :(得分:4)
似乎具有moveBullet
功能的类与所有敌人的容器不同,因此您正在删除不是容器子代的MovieClip,因为错误消息说明。你可以这样做:
if(MovieClip(e.target).parent)
{
MovieClip(e.target).parent.removeChild(MovieClip(e.target));
}
从其添加的任何父级中删除事件的目标。如果它没有被添加到任何地方的显示列表中,则不会将其删除,因此您不会收到其他错误。
或者,由于您声明enemy
是容器,因此您可以执行此操作:
enemy.removeChild(MovieClip(e.target));