2010-09-06 105 views
1

我正在创建一个pacman风格的游戏。我正尝试使用removeChild()移除MovieClip的一个实例。当MovieClip实例“框”击中MovieClip实例“circle”时 - 环将从舞台上移除。使用removeChild(AS3)的错误

我在下面收到以下错误: ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子项。 在flash.display一::级DisplayObjectContainer/removeChild之() 在移动/ eatCircle()

package { 
     import flash.display.Sprite; 
     import flash.display.MovieClip; 
     import flash.events.Event; 
     import flash.events.KeyboardEvent; 
     import flash.ui.Keyboard; 

     public class Move extends MovieClip { 

     var ScoreObjects:Array = new Array(); // creates ScoreObjects array 


      private var inertia:int=8; //amount of friction 

     var score_field:String; 
     //var point:MovieClip; 


    // Constructor-------------------------------------------------------------------- 
      public function Move() { 
      init(); 
      } 

    // function init ----------------------------------------------------------------- 
     function init():void { 

      //stage.frameRate=60; 
     var score_field:String=""; 

     ScoreObjects[0] = new Circle(); 
     ScoreObjects[0].amount = 1; // amount of point 
     ScoreObjects[0].name = "circle"; 


      stage.addEventListener(Event.ENTER_FRAME, frameloop); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownEvent); 
      stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent); 

     box.addEventListener(Event.ENTER_FRAME, eatCircle); 
     wall.addEventListener(Event.ENTER_FRAME, hitWall); 

     stage.addChild(ScoreObjects[0]); // add Score Objects to stage ------------------------------ 
     trace(ScoreObjects[0]); 

     ScoreObjects[0].x = 105; 
     ScoreObjects[0].y = 233; 

      } 

    // function eatCircle -------------------------------------------------------------- 
    function eatCircle(event:Event):void { 

     if (box.hitTestObject(ScoreObjects[0])) { 
     trace ("I ate the circle"); 
     removeChild(ScoreObjects[0]); 
     //calcScore(); 
     } else { 
     trace ("I didn't eat the circle"); 
     } 
    } 



     }// end of class 
    }// end of package 

回答

0
if((ScoreObjects[0] as Circle)&&((ScoreObjects[0] as Circle).parent!=null)) 
{ 
    stage.removeChild(ScoreObjects[0]); 
} 
+0

我能够删除的圈子走下舞台 - 做stage.addChild(ScoreObjects [0])不过,我不确定为什么我仍然在输出窗口中收到错误。 ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子项。在move.display :: DisplayObjectContainer/removeChild()上Move/eatCircle() – jc70 2010-09-06 21:30:31

+1

刚刚更新了代码,这个东西正在显示,因为你没有停止你的事件从框中分派,但是你已经从舞台上删除了这个对象,这就是为什么你需要检查它,因为在我的代码案例或另一个将删除事件处理程序像'box.deleteEventListener(Event.ENTER_FRAME,eatC​​ircle);'删除后的孩子。就是这样了。不要忘记接受/评分答案/评论。祝你好运! – Eugene 2010-09-06 22:03:57

2

我没有在手的AS3编译器来测试这一点,但因为你没有stage.addChild(ScoreObjects[0])我相信你应该做的stage.removeChild(ScoreObjects[0])

+0

谢谢,我能够删除的圈子走下舞台 - 做stage.addChild(ScoreObjects [0]),但我不知道为什么我仍然在输出窗口接收到错误。 (我知道你提到你没有AS3编译器,所以不确定这是否可以回答,但是谢谢你试图提供帮助。) ArgumentError:错误#2025:提供的DisplayObject必须是一个孩子的来电者。 \t在flash.display使用::级DisplayObjectContainer/removeChild之() \t在移动/ eatCircle() – jc70 2010-09-06 21:28:52