Actionscript 3 强制屏幕重画,而不是使用removeChild()然后使用addChild()来更新图像?

Actionscript 3 强制屏幕重画,而不是使用removeChild()然后使用addChild()来更新图像?,actionscript-3,redraw,addchild,Actionscript 3,Redraw,Addchild,下面是我为回答另一个问题而创建的一些代码。它将库项从库中拉出,并以编程方式将其放在舞台上。没什么大不了的,只是为了让屏幕上显示的图像真正更新,我必须先删除child(),然后再添加child()。有没有其他方法可以强制屏幕重画 var currentImage:int = 1; var MAX_IMAGES:int = 3; MC_prevButton.addEventListener(MouseEvent.CLICK, goBack); MC_nextButton.addEventListe

下面是我为回答另一个问题而创建的一些代码。它将库项从库中拉出,并以编程方式将其放在舞台上。没什么大不了的,只是为了让屏幕上显示的图像真正更新,我必须先删除child(),然后再添加child()。有没有其他方法可以强制屏幕重画

var currentImage:int = 1;
var MAX_IMAGES:int = 3;

MC_prevButton.addEventListener(MouseEvent.CLICK, goBack);
MC_nextButton.addEventListener(MouseEvent.CLICK, goForward);

var imageClip:MovieClip = new Image_1();
var thumbClip:MovieClip = new Thumb_1();

imageClip.x = thumbClip.x = stage.stageWidth/2;
imageClip.y = thumbClip.y = stage.stageHeight/2;



addChildAt(thumbClip, 0);
addChildAt(imageClip, 1);

setImages(currentImage);

function goBack(event:MouseEvent):void {
    if (currentImage) currentImage--;
    setImages(currentImage);
}

function goForward(event:MouseEvent):void {
    if (currentImage < MAX_IMAGES) currentImage++;
    setImages(currentImage);
}

function setImages(imageNumber){
    trace("Setting image number: " + imageNumber);

    var LibraryImage:Class = getDefinitionByName("Image_" + imageNumber) as Class;
    if (LibraryImage){
        removeChild(imageClip);
        imageClip = new LibraryImage();
        addChildAt(imageClip, 1);
    }
    var LibraryThumb:Class = getDefinitionByName("Thumb_" + imageNumber) as Class;
    if (LibraryThumb){
        removeChild(thumbClip);
        thumbClip = new LibraryThumb();
        addChildAt(thumbClip, 0);
    }

    imageClip.x = thumbClip.x = stage.stageWidth/2;
    imageClip.y = thumbClip.y = stage.stageHeight/2;
}
var currentImage:int=1;
var MAX_图像:int=3;
MC_prevButton.addEventListener(MouseEvent.CLICK,goBack);
MC_nextButton.addEventListener(MouseEvent.CLICK,goForward);
var imageClip:MovieClip=新图像_1();
var thumbClip:MovieClip=newthumb_1();
imageClip.x=拇指夹.x=stage.stageWidth/2;
imageClip.y=thumbClip.y=stage.stageHeight/2;
addChildAt(拇指夹,0);
addChildAt(图像剪辑,1);
设置图像(当前图像);
函数goBack(事件:MouseEvent):void{
如果(currentImage)currentImage--;
设置图像(当前图像);
}
函数goForward(事件:MouseEvent):void{
if(currentImage

请注意,在本例中,此代码位于时间轴的第1帧上,它是一个1帧FLA文件

请尝试在forward和back方法的末尾调用updateAfterEvent():

function goForward(event:MouseEvent):void {
    if (currentImage < MAX_IMAGES) currentImage++;
    setImages(currentImage);
    event.updateAfterEvent();
}
函数前进(事件:MouseEvent):无效{
if(currentImage
谢谢你的回答,但不是这样。updateAfferEvent()用于强制在事件循环中重新绘制屏幕,以便在屏幕在enter frame上自然更新之前更新内容。在这种情况下,我们没有进入回车帧循环,在运行setImage()后有足够的时间刷新屏幕。实际上,我们再次查看它时,误解了问题:)当您调用
addChildAt(imageClip,1)在AS3中,它会在级别1添加图像,但不会像AS2中那样删除图像。而是在级别2添加新图像。如果您的图像大小相同,则看起来什么都没有发生,因为顶部(第一个)图像隐藏了其余的图像。将所有图像的alpha值设置为.5,以查看它们是否正在添加,就在它们的后面。如果您将
addChildAt
更改为
addChild
,图像将添加到其他图像之上。嘿,感谢您坚持这一点!实际上,因为我在上面的代码示例中首先调用了removeChild()(这很管用,很难看),所以在将子对象添加回舞台之前,子对象将被删除。在这个版本(不起作用)中,除了初始化时发生的情况外,没有addChild()。我从一开始就添加了这个子对象,然后在imageClip变量中保存对它的引用,稍后我用setImages()函数将其设置为一个新的库项。您正在删除MovieClip的一个实例。然后创建库中定义的MovieClip的全新实例。这并不是说你要把图书馆里的电影剪辑放到舞台上。类是对象的蓝图,而不是对对象的引用。