as3儿童不会被删除

时间:2012-10-26 14:56:04

标签: actionscript-3

好吧,所以当点击进入第15帧时,我有一个按钮。如果xpsafety为0,我想要创建一个子项并将xpsafety设置为1.因此,如果再次单击该按钮,它将不显示该子项并执行计算

成名10:

var xpsafety:int = 0;
var xpclip:MovieClip = new xp();

RememberButton.addEventListener(MouseEvent.CLICK, GoToRemember); 


function GoToRemember(evt:MouseEvent):void { 
gotoAndPlay(15, "Scene 1");
if (xpsafety == 0) {
    addChild(xpclip);
    xpclip.x=41;
    xpclip.y=835;
    calculateExp(8);
    xpsafety = xpsafety +1;
}


}

第15帧:

stop();


    BackButton.addEventListener(MouseEvent.CLICK, GoBackSafety); 

    function GoBackSafety(evt:MouseEvent):void { 
        gotoAndPlay(10, "Scene 1");
        removeChild(xpclip);
        }

我得到的错误是:ArgumentError:错误#2025:提供的DisplayObject必须是调用者的子级。

我不明白这是什么意思,任何提示?拜托,谢谢你。

其他问题,但它可能是相关的,尽管xpsafety不等于0,但函数仍然关闭(我知道因为calculateExp(8)发生了。

4 个答案:

答案 0 :(得分:2)

自从我做任何框架脚本以来已经有一段时间了,因为它很快就会变得很麻烦且很难管理。请参阅here

xpsaftey问题上,当您返回第10帧时,将再次运行整个脚本,并使用默认值xpsaftey重新定义变量0。您需要将声明var xpsafety:int放在较早的帧上以防止这种情况发生。

你在for循环中使用xpsaftey的第二个例子只是在if语句的范围内再次重新定义它时会让事情变得更加混乱。我建议对变量scope进行一般性阅读。

答案 1 :(得分:0)

尝试做类似的事情:

xpclip.parent.removeChild(xpclip);

答案 2 :(得分:-1)

您正试图从侦听器内部访问xpclip变量,请尝试此操作。

var mc:MovieClip = (root as MovieClip).xpchild;
(root as MovieClip).removeChild(mc);

如果仍然无效,请检查mc是否为空。

答案 3 :(得分:-2)

我需要做的就是将我的变量放在第15帧的if语句中.....如下所示:

stop();

BackButton.addEventListener(MouseEvent.CLICK, GoBackSafety); 

function GoBackSafety(evt:MouseEvent):void { 
    gotoAndPlay(10, "Scene 1");

    }

var xpclip:MovieClip = new xp();
if (xpsafety==0) {
    var xpsafety:int = 0;
    addChild(xpclip);
    xpclip.x=41;
    xpclip.y=835;
    calculateExp(8);
    xpsafety = xpsafety +1;
    trace(xpsafety);
    }