我正在创建一系列迷你游戏和动画,并计划将它们全部放入一个 flash 文件中。每个游戏都需要在玩家完成后消失。游戏完成后,我不知道在外部 swfs 的部分中放入什么。我目前只有一个痕迹(“完成”)。
在我的主 swf 中,您应该单击开始,然后会出现一个游戏 swf,完成后,它应该会消失。
我查了一些教程,它们是关于访问外部 swfs 中的变量的,但我对它们一无所知。
我正在创建一系列迷你游戏和动画,并计划将它们全部放入一个 flash 文件中。每个游戏都需要在玩家完成后消失。游戏完成后,我不知道在外部 swfs 的部分中放入什么。我目前只有一个痕迹(“完成”)。
在我的主 swf 中,您应该单击开始,然后会出现一个游戏 swf,完成后,它应该会消失。
我查了一些教程,它们是关于访问外部 swfs 中的变量的,但我对它们一无所知。
代替trace("finished");
,调度类似完整事件的内容:
dispatchEvent(new Event(Event.COMPLETE));
然后在容器 swf 中侦听该事件并做出适当的响应。
以下是主机(父)swf 的示例:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadDone, false,0,true);
loader.load(new URLRequest("temp2.swf"));
function loadDone(e:Event){
trace("CONTENT LOADED");
addChild(loader.content);
loader.content.addEventListener(Event.COMPLETE,go,false,0,true); //listen on the capture phase (third parameter true) if you're complete event is NOT on the main timeline of your child swf
}
function go(e:Event):void {
trace("Content is all done");
removeChild(loader.content);
loader.unloadAndStop(); //tries to free the app of all memory used by the loaded swf
loader = null;
}
另一种方法是代替跟踪(“完成”),您可以让子 swf 自行删除(根据对问题的评论)。我认为这是一个不太理想的解决方案(尽管更加封装),因为它降低了可重用性,并且可能仍会将 swf 留在内存中:
stop();
if(this.parent){
this.parent.removeChild(this);
}