Real quick idea,not tested (the code below could probably be made better with a 
rest statement - see link below), how about not doing it recursively (because 
that's why it's calling remove more than once), but doing something like this:

import flash.display.Sprite;

private function removePrevious():void {
        if (xAxis!=null) {
                removeChild(xAxis);
                xAxis = null;
        }
        if (yAxis!=null) {
                removeChild(yAxis);
                yAxis = null;
        }
}

private function renderAxis(which:String):void 
        removePrevious();
        switch (which) 
        {
                case ("X") :
                        xAxis = new Sprite();
                        draw([xAxis]);
                        break;
                case ("Y") :
                        var yAxis:Sprite = new Sprite();
                        draw([yAxis]);
                        break;
                case ("both") :
                        var xAxis:Sprite = new Sprite();
                        var yAxis:Sprite = new Sprite();
                        draw([xAxis, yAxis]);
                        break;
        }
}

private function draw(axes:Array):void
{
        for (var i:int = 0; i < numAxes; i++)
        {
                addChild(axes[i]);
        }
}

Or for the draw method, use a rest parameter instead of an array:

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f56.html



Jason Merrill
Bank of America     Instructional Technology & Media   ·   GCIB & Staff Support 
L&LD

Interested in Flash Platform technologies?  Join the Bank of America Flash 
Platform Developer Community 
Interested in innovative ideas in Learning?  Check out the Innovative Learning 
Blog and subscribe.





-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Mendelsohn, 
Michael
Sent: Wednesday, January 14, 2009 2:28 PM
To: Flash Coders List
Subject: [Flashcoders] recursive question?

Hi list...

I have two functions, where either an X is rendered, a Y is rendered, or
both an X and a Y.  removePrevious() is called before anything gets
rendered, so as to clear the stage.  The problem is when "both" are
rendered, removePrevious() is called twice. It first clears the stage,
renders a new x, then renders a new y -- but not before removing that
newly just created X.  How can I avoid this?

Thanks,
- Michael M.

private function removePrevious():void {
        if (xAxis!=null) {
                removeChild(xAxis);
                xAxis = null;
        }
        if (yAxis!=null) {
                removeChild(yAxis);
                yAxis = null;
        }
}
private function renderAxis(which:String):void 
        removePrevious();
        switch (which) {
                case ("X") :
                        xAxis = new Sprite();
                        addChild(xAxis);
                        break;
                case ("Y") :
                        yAxis = new Sprite();
                        addChild(yAxis);
                        break;
                case ("both") :
                        renderAxis("X");
                        renderAxis("Y");
                        break;
        }
}

_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to