Actionscript 3 卸载外部SWF文件
我正在从主菜单加载多个swf文件,但从未卸载。我用以下代码完成了这项工作。。。唯一的问题是,我看到的不是卸载到主菜单,而是一个白色屏幕,好像什么都没有加载Actionscript 3 卸载外部SWF文件,actionscript-3,Actionscript 3,我正在从主菜单加载多个swf文件,但从未卸载。我用以下代码完成了这项工作。。。唯一的问题是,我看到的不是卸载到主菜单,而是一个白色屏幕,好像什么都没有加载 function BackToMenu(i:MouseEvent):void { var BaseMovie:MovieClip = parent.parent as MovieClip; BaseMovie.parent.removeChild(BaseMovie); } 编辑:我将从一开始就解释我有一个MainMenu.
function BackToMenu(i:MouseEvent):void
{
var BaseMovie:MovieClip = parent.parent as MovieClip;
BaseMovie.parent.removeChild(BaseMovie);
}
编辑:我将从一开始就解释我有一个MainMenu.swf。单击与游戏相关的按钮时,将从MainMenu.swf加载游戏。当在MainMenu.swf上单击游戏按钮时,游戏将加载。当玩家完成游戏时,他们会看到退出按钮,该按钮将卸载当前游戏并显示main menu.swf,而无需重新加载。首先,您应该删除一个
家长,以确保您实际上只删除游戏:
function BackToMenu(i:MouseEvent):void
{
var BaseMovie:MovieClip = parent as MovieClip;
BaseMovie.parent.removeChild(BaseMovie);
}
这将解决您最紧迫的问题,并允许您返回菜单。但是,您并没有真正卸载游戏,只是将其从显示列表中删除。这通常意味着,仍然有声音在运行,活动键和/或鼠标侦听器等-这些都必须注意
就像我说的,这只会解决你眼前的问题。然而,这既不是一个永久的解决方案,也不是一个好的解决方案:既然主要的SWF负责加载游戏,它也应该负责处理游戏。你应该在游戏中加入清理代码,但它应该只关注停止任何正在运行的脚本、声音等-简单的规则:在游戏中启动的任何东西都应该在游戏中停止。但它不应尝试访问显示层次结构中更高层次的对象,或尝试卸载自身
更好的方法是替换上面所有的代码,让主SWF负责删除游戏,以及从内存中卸载游戏。为此,您必须做三件事:
不要编写实际的removeChild
调用等,而是让您的按钮分派一个自定义事件来通知主SWF它现在应该被删除:
function onBackButtonClicked( event:MouseEvent ):void {
destroyGame(); // this would be the function that stops all the scripts
dispatchEvent( new Event( "FINISH_GAME", true ) );
}
请注意,“FINISH_GAME”现在是一个“冒泡”事件,即它在显示层次结构中向下移动。我们现在可以在包含游戏的任何祖先显示对象中侦听此事件
在主SWF中,当游戏成功加载时,将事件侦听器添加到加载程序中。这在加载过程完成时调用的事件侦听器中完成:
function onLoadComplete( event:Event ):void {
var loader:Loader = event.target.loader;
loader.addEventListener( "FINISH_GAME", onFinishGame, true );
}
使用相应的事件处理程序删除游戏剪辑:
function onFinishGame( event:Event ):void {
var loader:loader = event.currentTarget;
loader.parent.removeChild( loader );
loader.unloadAndStop();
}
还有几件事需要考虑:
- ActionScript中的命名约定建议我们对方法和变量使用小写名称,对类型使用大写名称
- 相同的命名约定建议我们使用“on”或“handle”作为事件侦听器的前缀以及事件的名称。因此,它应该是
onBackToMenu
,或者更确切地说是onBackButtonClicked
,等等
- 由于我对加载所使用的代码一无所知,所以我假设您有一个完整的侦听器,并且不保留对加载程序的引用。如果使用成员变量,则可以使用该变量而不是
event.target
,resp<代码>事件。当前目标
一点线索也没有:s今天早上的比例是13%,不知道它是如何工作的,公平地说,我没有那么担心。。。我只是在解释之前没有注意到左边的点击图标。好吧,那么,让我们看看如何回答你的问题。。。“卸载到主菜单”是什么意思?“卸载”通常意味着清空加载程序中的内容,如:所有加载的内容现在都被丢弃。这可以通过调用
Loader#unload
或Loader#unloadAndStop
来完成,但要使其起作用,必须首先将对加载内容的所有引用置零和/或删除。粘贴的代码只会从显示列表中删除一个特定的MovieClip。不多也不少。你到底想做什么?我会从一开始就解释我有一个main menu.swf。单击与游戏相关的按钮时,将从MainMenu.swf加载游戏。当在MainMenu.swf上单击游戏按钮时,游戏将加载。当玩家完成游戏时,会出现退出按钮,该按钮将卸载当前游戏并显示MainMenu.swf,而无需重新加载。