2011-05-10 88 views
1

我試圖建立遊戲像雞侵略者,我得到這個eror:錯誤#2025 AS3

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. at 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 
    

我需要知道,如果它的確定子彈添加到這樣的階段? 還是有另一種方式?

  • 這裏是使子彈移動的代碼:

    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 
    
  • enemy-是所有的敵人的容器(影片剪輯)

    回答

    4

    看起來,具有moveBullet函數的類與所有敵人的容器不同,因此您將刪除不是容器子項的MovieClip,如錯誤消息所解釋的。你可以這樣做:

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

    從任何父母添加到其中刪除事件的目標。如果它沒有添加到任何地方的顯示列表中,則不會將其刪除,因此您不會收到其他錯誤。

    或者,因爲你指出enemy是容器,你可以這樣做:

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

    謝謝你寫工作you..the第一個代碼... – user747471 2011-05-10 20:09:13

    +0

    @ user747471 - 不要忘了接受回答正確,如果它的工作:) – Allan 2011-05-11 02:35:30