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