2010-04-06 99 views
0

抱歉,新为ActionScript 3.错误2025:提供的DisplayObject必须是呼叫者的子

我有(基于像QT电影对象图像)的对象旋转器的显示()函数。它首先将当前图像保存在一个辅助变量中,然后从库中分配一个新图像在旧图像下面。为了获得良好的淡入淡出效果,旧图像的alpha通过enter_frame循环下去,然后移除。

哪里出现显示列表似乎存在问题,可能是因为已经添加了oldImg的值? (这不是第一次传递的错误)

顺便说一句,我必须删除旧图像或我可以离开它,因为当它通过鼠标位置再次调用? (图像编号可以相当大)

有没有人有进一步的见解?谢谢!

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);**    
    } 
     ... 
} 
+0

什么是'图像'以及错误发生在哪里 – 2010-04-06 09:55:24

+0

图像只是一个mc,层叠在光标mc(抓手)之下,必须始终可见。 错误将在removeChild中抛出。 – Mocca 2010-04-06 10:14:46

+0

是淡出现象?如果是,那么你很可能试图多次删除图像,尝试使用if(oldImg && images.contains(oldImg)) – longstaff 2010-04-06 10:49:14

回答

-1

你从不添加oldImgimages,从而oldImg不是调用(images)的孩子,无法从该MovieClip删除。我认为这是第一次调用EnterFrame

+0

'oldImg'是'newImg'(或者是'null',它被排除)已被添加。 – back2dos 2010-04-06 10:43:24

+0

你不知道,如果没有看到代码 – 2010-04-06 10:46:01

+0

上面的代码,基于发布的代码都是相关的以及OP对他所做的描述的假设,我非常确定。这肯定比可能性更大,被编辑出来的代码会产生副作用,导致“oldImg”永远不会被添加到“images”中。 – back2dos 2010-04-06 11:40:37

0

好吧,onEnter似乎是一个输入框架处理程序。一旦你的对象淡出,你忘记的是删除侦听器。一旦alpha为0,图像被移除。但是一帧之后,处理程序仍然被调用。现在oldImg不再是images的孩子。

编辑:也许你应该只使用补间库。我个人建议eaze

+0

谢谢!我会尝试。 – Mocca 2010-04-06 11:55:32

0

谢谢你们,我实在要测试

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

如果我不使用单独的ENTER_FRAME事件处理程序的每个图像对象,我的猜测是更好的解决方案。

相关问题