Actionscript 3如何从stage中删除实例

时间:2013-09-23 17:28:34

标签: actionscript-3 mouseevent event-listener removechild

所以我在第一帧上有两个动画片段,sRP_mc和dP_mc。现在,当点击任一个动画片段时,我希望从舞台中删除动画片段然后我想要改变帧(我希望电影转到第5帧)。在第5帧,有一个关闭按钮,如果单击该按钮,会将您带回到第1帧(但是当它返回到第1帧时,我希望点击的动画片段不再存在)。这是我的第一帧(第1帧)的代码。

import flash.events.MouseEvent;
stop();
if (sRP_mc.visible == true) {
    sRP_mc.addEventListener(MouseEvent.CLICK, sRPClicked);
    function sRPClicked(event:MouseEvent):void {
        sRP_mc.removeEventListener(MouseEvent.CLICK, sRPClicked);
        removeChild(sRP_mc);
        gotoAndPlay(5);
    }
}

if (dP_mc.visible == true) {
    dP_mc.addEventListener(MouseEvent.CLICK, dPClicked);
    function dPClicked(event:MouseEvent):void {
        dP_mc.removeEventListener(MouseEvent.CLICK, dPClicked);
        removeChild(dP_mc);
        gotoAndPlay(10);
    }
}

在第5帧,有一个关闭按钮,代码就是这个。

import flash.events.MouseEvent;
stop();
close_btn.addEventListener(MouseEvent.CLICK, closeScreen);
function closeScreen(event:MouseEvent):void {
    gotoAndStop(1);
}

并且在第10帧上还有一个关闭按钮,代码就是这个。

import flash.events.MouseEvent;
stop();
close_btn.addEventListener(MouseEvent.CLICK, closeScreen2);
function closeScreen2(event:MouseEvent):void {
    gotoAndStop(1);
}

如您所见,如果使用removeChild方法删除sRP_mc或dP_mc,则sRP_mc和dP_mc不应该是可见的(.visible!= true)但是当我播放它时,它表示sRP_mc和dP_mc始终可见并且孩子不会被完全从舞台上移除(或者我认为每当我回到第1帧时,意志就会不断回归)。为什么要这样做以及我该如何解决?

1 个答案:

答案 0 :(得分:0)

当从舞台中删除对象时,除非您手动执行此操作,否则visible属性不会更改为false。这里有一个更好的方法来检查一个项目是否不在舞台上(我还清理了你的内联函数):

if (sRP_mc.stage != null) {
    sRP_mc.addEventListener(MouseEvent.CLICK, sRPClicked);
}

function sRPClicked(event:MouseEvent):void {
    sRP_mc.removeEventListener(MouseEvent.CLICK, sRPClicked);
    removeChild(sRP_mc);
    gotoAndPlay(5);
}

如果从舞台中删除了一个对象,则其stage属性设置为null。希望这有帮助!