1

帮助。单击后退按钮返回主页后,我需要删除 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();
4

1 回答 1

0

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

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

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

函数内部创建的变量仅在该函数执行时存在。在函数外部创建的变量似乎永远不会收到值。

您可以使用两种方法:

跟踪您添加到舞台的内容,方法是将它们放在Array

newContainer将函数外部的变量替换为Array被调用的containers

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);
}
于 2012-07-07T06:11:36.457 回答