错误#2025 AS3

时间:2011-05-10 19:30:59

标签: flash actionscript-3 flash-builder

我正在尝试像鸡入侵者一样构建游戏,我得到了这个错误:

  

ArgumentError:错误#2025:提供的DisplayObject必须是子级   来电者。在flash.display :: DisplayObjectContainer / removeChild()     at superstudent7_fla :: MainTimeline / moveBullet()

当我的太空飞船射击时会出现这个问题。

要解决这个问题,我需要知道两件事:

  1. 我的子弹被定义为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
    
  2. 我需要知道它是否可以像这样在舞台上添加子弹? 还是有另一种方式?

    1. 这是使子弹移动的代码:

      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
      
    2. 敌人 - 是所有敌人的容器(movieClips)

1 个答案:

答案 0 :(得分:4)

似乎具有moveBullet功能的类与所有敌人的容器不同,因此您正在删除不是容器子代的MovieClip,因为错误消息说明。你可以这样做:

if(MovieClip(e.target).parent)
{
      MovieClip(e.target).parent.removeChild(MovieClip(e.target));
}

从其添加的任何父级中删除事件的目标。如果它没有被添加到任何地方的显示列表中,则不会将其删除,因此您不会收到其他错误。

或者,由于您声明enemy是容器,因此您可以执行此操作:

enemy.removeChild(MovieClip(e.target));