• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Trouble with removing objects using ActionScript

New Here ,
Apr 09, 2012 Apr 09, 2012

Copy link to clipboard

Copied

I'm making a game where objects are sorted, and after they are put into one of the bins, I would like to remove the object so that the program doesn't get bogged down by tons of items that are no longer in use. When I try to do this using the removeChild() method, I get "TypeError: Error #1009: Cannot access a property or method of a null object reference."

Is there a good way to remove the object and its event listeners so that I can put new objects into play without fear of the game slowing down, or should I just make the old objects invisible and ignore them? I've tried moving to a new frame using "nextFrame();" where all of my old objects are no longer there, but I get a similar error, and as the background and collectors remain the same between levels, it might be unnecessary to start over completely.

TOPICS
ActionScript

Views

1.6K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

The 1009 error indicates that the objects you are trying to target do not exist in the eyes of the code. Since you say there are tons of items, are they created dynamically?  If so, then you need to show how you create them, how you store references to them, and what code you use to remove them. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

The first set of items start out already placed on the stage. Would it be best to add them at the start rather than having them already in their starting points on the stage?

If so, what would the code look like? I'm assuming it would use stage.addChild() but as the object wouldn't be on the stage, it wouldn't have an instance name, so what would I put in the addChild() instead? Also, how do I specify coordinates for where it would be added?

Thanks for the help!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

If the objects are already on the stage, then what are you using to try to remove them, and where are you trying to do it?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

Part of my code is the function update, that starts running when the "start" button is pressed. I have 6 objects that need to be sorted, and I have the following code to get rid of the old 6 items once they are properly sorted:

if (correct > 5){

                              description.alpha = 1;

                              description.text = "Success! Click anywhere to continue.";

                              addChild(nextButton);

                              nextButton.addEventListener(MouseEvent.CLICK, advance)

                              function advance(e:MouseEvent){

  //get rid of old things that have been sorted

                                        removeChild(waterbottle);

   removeChild(plasticbottle);

   //add new things to sort

   addChild(bananapeel);

   addChild(lightbulb);

                              }

}

I suppose after the items have been added and the next stage starts, I'd want to remove "nextButton" and its event listener.

All of my code and objects are in frame 1.

Earlier in the code I used removeChild to "hide" the nextButton.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

If you are getting the 1009 error, then go into your Flash Publish Settings and select the option to Permit Debugging.  That should help by including the line number where the problem arises.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

The problem arises in an earlier part of the update function:

plasticbottle.update();

plasticbottle is in a particle-like class that falls according to gravity, and it seems that it doesn't want to be removed since the plasticbottle.update(); is still running.

The update function, which starts when the start button is pressed, works like this (pseudocode):

{

Update all the items(gravity, picking up, dropping, etc)

Count how many items have been sorted correctly

If all of the items have been correctly sorted, create a button to go to the next level

When the button is clicked, (this is where I'm having trouble) remove the old objects and add new ones)

}

The error is because once I remove the old objects, it still wants to update them, but they're no longer on the stage.

Hopefully this illustrates what I'd like to do.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

You should use something like an array to store references to the objects and use that array to target them for anyting you do with them.  As you remove objects, remove them from the array so that they will not be targeted again

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Apr 10, 2012 Apr 10, 2012

Copy link to clipboard

Copied

That sounds like a good solution, and I'll see if I can figure out arrays. One last question then: Is it best to start with all the objects on the stage and add them all to an array (I believe the command is "push(object)") or do I keep all of the items off the stage and add them using something like "var waterbottle = new Bottle();"? And if they both work, which is preferable?

Thanks for your advice.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Apr 11, 2012 Apr 11, 2012

Copy link to clipboard

Copied

LATEST

I would go with the = new Bottle() approach, especially if there are new bottles being added that way anyways.  THere can be differences when dealing with manually-added versus dynamically-added objects, so dealing with them all one way will allow you to retain a consiustent set of commands.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines