views:

185

answers:

3

Hi,

sorry, new to actionscript 3.

I have a display() function for an object rotator(image based like a QT object movie). It first saves the current image in a helper variable and then allocates a new image, from the library, beneath the old one. To get a nice crossfade effect, the old image's alpha is looped down via enter_frame and then removed.

Which is where there seems to be an issue with the display list, maybe recognizing oldImg's value as being already added? (it's not a first pass error)

Btw, do i have to remove the old image or can i leave it, for when it's being called up via the mouse position again? (the image number can get fairly large)

Does anyone have further insight? Thanks!

function display(num:Number):void   //num: image number
{
   ...    
   oldImg = newImg;   

   ClassReference = getDefinitionByName("Class"+num) as Class;
   imgBD = new ClassReference(0,0);
   newImg = new Bitmap(imgBD);

   images.addChild(newImg); 
   newImg.x=0;
   newImg.y=0;

}


function onEnter(evt:Event):void
{
    if (oldImg) 
    {
        if (oldImg.alpha > 0) oldImg.alpha -= 0.15; 
        **else images.removeChild(oldImg);**              
    }
        ...
}
A: 

You never add oldImg to images, thus oldImg is not a child of the caller (images) and cannot be removed from that movieclip. I think this happens the first time EnterFrame is called.

Matti
`oldImg` was `newImg` (or is `null` which is excluded) und thus has previously been added.
back2dos
You don't know that without seeing the code above the assignment
Matti
based on the assumption that the code posted is all that is relevant and on the OP's description on what he does, I am very certain. It is definitely more likely than the possibilty, that the code that's been edited out, would have side effects that cause "`oldImg` never to be added to `images`".
back2dos
A: 

well, onEnter seems to be an enter frame handler. what you forgot is to remove the listener, once your object is faded out. once alpha is 0, the image is removed. but one frame later, the handler still gets called. now oldImg is no longer a child of images.

edit: maybe you should just use a tween library. Personally, I suggest eaze.

greetz
back2dos

back2dos
thanks! i'll try that.
Mocca
A: 

Thanks guys, indeed i have to test for

if ( (oldImg) && images.contains(oldImg) ) 

if i don't use a separate enter_frame event handler for each image object, which i guess is the better solution.

Mocca