Skip to main content
Inspiring
December 3, 2015
Question

error shows up after removing child

  • December 3, 2015
  • 2 replies
  • 2759 views

so when evil dies it plays a death animation and is removed on the last frame

it works fine but an error show up

The supplied DisplayObject must be a child of the caller.

if(evil.currentFrame == 47)

   {

    if(contains(evil))

    {

     removeChild(evil);

    }

    if(contains(evilShadow))

    {

     removeChild(evilShadow);

    }

   }

This topic has been closed for replies.

2 replies

kglad
Adobe Expert
December 3, 2015

use:

if(evil.currentFrame == 47)

   {

     removeF(evil);

     removeF(evilShadow);

   }

function removeF(dobj:DisplayObject=null):void{

if(dobj&&dobj.stage){

dobj.parent.removeChild(dobj);

}

}

Inspiring
December 3, 2015

I am not sure but I think he's using the if statement on enter frame event.. so if he used if(evil.currentFrame == 47) first then he'll get an error after it has been removed..

Inspiring
December 4, 2015

I changed some stuff.

instead of removing evil, it would respawn somewhere else and I just reset its coordinates

if(evil.currentFrame == 47)

   {

   

    var randomNum:Number = Math.random()*7

    var roundedNum:Number = Math.floor(randomNum);

   

    if(roundedNum == 0)

    {

     evilShadow.x = char.x+3000;

     evilShadow.y = char.y+3000;

    }

    if(roundedNum == 1)

    {

     evilShadow.x = char.x+2000;

     evilShadow.y = char.y;

    }

    if(roundedNum == 2)

    {

     evilShadow.x = char.x+3000;

     evilShadow.y = char.y-3000;

    }

    if(roundedNum == 3)

    {

     evilShadow.x = char.x

     evilShadow.y = char.y-2000;

    }

    if(roundedNum == 4)

    {

     evilShadow.x = char.x-3000;

     evilShadow.y = char.y+3000;

    }

    if(roundedNum == 5)

    {

     evilShadow.x = char.x-3000;

     evilShadow.y = char.y-3000;

    }

    if(roundedNum == 6)

    {

     evilShadow.x = char.x-2000;

     evilShadow.y = char.y;

    }

    if(roundedNum == 7)

    {

     evilShadow.x = char.x;

     evilShadow.y = char.y+2000;

    }

   

    evilHealth = 200;

    evilDies = false;

    died = false;

    fadePresent = false;

    darkhere = false;

   

    if(contains(dark))

    {

     removeChild(dark);

    }

I expected the last code to display the same error but it didn't, so I have no idea what causes the error.


nevermind an error showed up but its different

TypeError: Error #2007: Parameter child must be non-null.

at flash.display::DisplayObjectContainer/contains()

at HorrorGame/checkforHits()

this is the function

if(flashOn == false)

   {

    evilSpeed = 4;

   }

  

   if(flashOn == true)

   {

  

   if((evilShadow.x < char.x)&&(faceLeft == true))

   {

    if(char.hitTestObject(evilShadow))

    {

     evilHealth--;

     evilSpeed = 0.5;

    }

   }

  

   else if((evilShadow.x >= char.x)&&(faceRight == true))

   {

    if(char.hitTestObject(evilShadow))

    {

     evilSpeed = 0.5;

     evilHealth--;

    }

   }

  

   else if((evilShadow.y < char.y)&&(faceUp == true))

   {

    if(char.hitTestObject(evilShadow))

    {

     evilSpeed = 0.5;

     evilHealth--;

    }

   }

   else if((evilShadow.y > char.y)&&(faceDown == true))

   {

    if(char.hitTestObject(evilShadow))

    {

     evilSpeed = 0.5;

     evilHealth--;

    }

   }

   else

   {

    evilSpeed = 4;

   }

   }

  

   if(evilShadow.hitTestObject(charShadow))

   {   

    healthbar.x -= 1.2;

    health -= 2;

   }

   else

   {

   }

  

   healthbar.scaleX = health/500;

  

   if(evilShadow.hitTestObject(charShadow))

   {

    if(fadePresent == false)

    {

     dark = new DarkFade;

     dark.scaleX = 4;

     dark.scaleY = 4;

     addChild(dark);

     this.setChildIndex(dark, this.numChildren-1);

     fadePresent = true;

     darkhere = true

    }

   }

   if((evilShadow.hitTestObject(charShadow)==false)&&(darkhere == true))

   {

    fadePresent = false;

    removeChild(dark);

    darkhere = false;

   }

   if(evilHealth <= 0)

   {

    evilDies = true;

   }

   if(evil.currentFrame == 47)

   {

   

    var randomNum:Number = Math.random()*7

    var roundedNum:Number = Math.floor(randomNum);

   

    if(roundedNum == 0)

    {

     evilShadow.x = char.x+3000;

     evilShadow.y = char.y+3000;

    }

    if(roundedNum == 1)

    {

     evilShadow.x = char.x+2000;

     evilShadow.y = char.y;

    }

    if(roundedNum == 2)

    {

     evilShadow.x = char.x+3000;

     evilShadow.y = char.y-3000;

    }

    if(roundedNum == 3)

    {

     evilShadow.x = char.x

     evilShadow.y = char.y-2000;

    }

    if(roundedNum == 4)

    {

     evilShadow.x = char.x-3000;

     evilShadow.y = char.y+3000;

    }

    if(roundedNum == 5)

    {

     evilShadow.x = char.x-3000;

     evilShadow.y = char.y-3000;

    }

    if(roundedNum == 6)

    {

     evilShadow.x = char.x-2000;

     evilShadow.y = char.y;

    }

    if(roundedNum == 7)

    {

     evilShadow.x = char.x;

     evilShadow.y = char.y+2000;

    }

   

    evilHealth = 200;

    evilDies = false;

    died = false;

    fadePresent = false;

    darkhere = false;

   

    if(contains(dark))

    {

     removeChild(dark);

    }

   

   

   }

Inspiring
December 3, 2015

if(contains(evil))

   {

    if(evil.currentFrame == 47)

    {

     removeChild(evil);

     removeChild(evilShadow);

    }

   }