我无法在单击后退按钮转到函数goHomePage(evt:Event)时删除此电影片段的子片段:void{



帮助。点击后退按钮返回主页后,我需要删除newContainer(这是一个电影剪辑)。但它只是加载了主页,newContainer仍然存在。:(我哪里错了?

import flash.events.MouseEvent;
import flash.events.Event;
import fl.motion.MotionEvent;
import flash.net.URLVariables;
import flash.display.MovieClip;
import flashx.textLayout.elements.Configuration;

var ctr:int = 0;
var now:Date = new Date();

var myurl:String = "http://localhost:8888/eventspictures/getdata.php";

var scriptLoader:URLLoader = new URLLoader();
var scriptRequest:URLRequest = new URLRequest();
var newContainer:MovieClip;

scriptRequest.url = myurl + "?ck=" + now.getTime();
scriptLoader.addEventListener(Event.COMPLETE, handleLoadSuccess);
scriptLoader.addEventListener(IOErrorEvent.IO_ERROR, handleError);

scriptRequest.method = URLRequestMethod.POST;
scriptLoader.load(scriptRequest);

function handleLoadSuccess(evt:Event):void
{
for (var j:Number = 0; j <4; j++)
{
    var newContainer:MovieClip = new con();
    newContainer.name = String(ctr);
    newContainer.y = j*80 +65;
    newContainer.x= 16;
    stage.addChild(newContainer);



    var variables:URLVariables = new URLVariables(evt.target.data);
    trace(variables.output);

    var parse:String = variables.output;
    var parsed:Array = parse.split("<|>");
    var tab:String = '&#09;';
    var eventname:String = '';
    var date:String='';
    var slotsleft:String='';

// different variable names to assign to different column names(etc; eventname, date, slotsleft)
    // loop through.. start from O
        for (var i:Number = 0; i<parsed.length-1; i++)
    {
        trace(parsed[i]);
        var item:String = parsed[i];
        var itemarray:Array = item.split(",");
        eventname +=  itemarray[2] + tab + "<br>";
        date += itemarray[3] + tab;
        slotsleft += itemarray[4] + tab;


        trace(eventname);
        newContainer.eventname_txt.htmlText = eventname;
    newContainer.date_txt.htmlText= date;
    newContainer.slotsleft_txt.htmlText=slotsleft;

}

    }


    //slotsleft_txt.x = 270;
}
function handleError(evt:IOErrorEvent):void
{
}
backbutton_mc.addEventListener(MouseEvent.CLICK, goHomePage);
function goHomePage (evt:Event):void{
    gotoAndPlay("dashboard");

removeChild(newContainer);}

stop();

在函数handleLoadSuccess()中,有一个循环创建4个MovieClip,并将它们添加到阶段中。

但是在goHomePage()函数中,您只尝试从后台移除一个对象。在您的示例中,这个对象可能是null(如果您使用调试Flash播放器,尝试删除null的对象应该会产生错误)。

它可能是null的原因是,您在代码中定义了两个名为newContainer的变量:一个在脚本开头声明,另一个在函数handleLoadSuccess()中声明(因为每行都使用关键字var)。

在函数内部创建的变量仅在该函数执行时存在。在函数外部创建的变量似乎从未接收到值。

您可以使用两种方法:

通过将添加到舞台上的内容放入Array:来跟踪它们

将函数外的newContainer变量替换为名为containers:的Array

var containers:Array = [];

在函数handleLoadSuccess()中,当您将每个MovieClip添加到阶段时,也将它们添加到containers数组:

stage.addChild(newContainer);
containers.push(newContainer);

最后,在函数goHomePage()中,对containers数组进行迭代以移除每个MovieClip:

for (var j:int = 0; j < containers.length; j++)
{
    stage.removeChild( containers[j] );
}
// reset the containers array so it's empty for the next time
// and to remove the references to the MovieClips (to prevent a memory leak)
containers=[];

盲目移除舞台上的所有东西

如果这是可访问的,那就容易多了。只需在goHomePage()函数中向后迭代阶段的子级:

for (var j:int = stage.numChildren; j >= 1; j--)
{
    stage.removeChildAt(j - 1);
}

最新更新