需要从Array.cs4 as3中卸载外部swf



我必须把一些画变成一个动画flash SWF/游戏,其他人会把它变成一个应用程序。

我有一个打开的动画-这会导致一个菜单,在那里你可以选择一些东西-但现在动画只是播放到用户选择游戏的帧。

我制作了一个游戏菜单-当你选择一个游戏时-按钮将特定游戏加载到一个空的MC(称为emptymc-实例名称emptymc_MC)

游戏加载并覆盖整个屏幕,除了顶层的菜单栏——在应用程序中,菜单栏始终位于下方。我还没有做出这些选择,但它很可能是一个声音切换-访问网站-购买完整的应用程序。

理想情况下,我希望它完成到最后一帧,然后卸载或删除它自己。与此同时,主权财富基金在下面显露出来。我的问题是,我无法摆脱我导入的SWF,即使我在加载程序中加载了一个新版本。

stop(); 
bee.addEventListener(MouseEvent.CLICK, Click);
function Click( event:MouseEvent):void {
gotoAndPlay(currentFrame+1);
}
bee.addEventListener(MouseEvent.CLICK,f);
function f(e:Event):void{
var movieArray:Array = ["howmanybees1", "howmanybees2", "howmanybees3",];
var loader:Loader = new Loader(); 
var index:int = movieArray.length * Math.random();
var url:String = movieArray[index] + '.swf'; 
trace("Attempting to load", url); 
loader.load(new URLRequest(url));    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderComplete); 
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
addChild(loader); 
function loaderComplete(e:Event):void {     
trace("Successfully loaded", url);
} function loaderIOError(e:IOErrorEvent):void {     
trace("Failed to load", url);    
}  
}

**编辑**

这是我当前的源代码:

stop();

bee.addEventListener(MouseEvent.CLICK, Click);
function Click(event: MouseEvent): void {
gotoAndPlay(currentFrame + 1);
}

bee.addEventListener(MouseEvent.CLICK, f);
function f(e: Event): void {
var movieArray: Array = ["howmanybees1", "howmanybees2", "howmanybees3", "howmanybees4", "howmanybees5", ];
var loader: Loader = new Loader();
var index: int = movieArray.length * Math.random();
var url: String = movieArray[index] + '.swf';
trace("Attempting to load", url);
loader.load(new URLRequest(url));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError);
stage.addEventListener("UnloadGame", unloadGame);
addChild(loader);

function loaderComplete(e: Event): void {
trace("Successfully loaded", url);
}
function loaderIOError(e: IOErrorEvent): void {
trace("Failed to load", url);
}
function unloadGame(e: Event): void {
trace("unloaded at last", url);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError);
loader.removeEventListener("UnloadGame", unloadGame);
removeChild(loader);
loader.unloadAndStop();
}
}
sheepgamebtn.addEventListener(MouseEvent.CLICK, Click2);
function Click2(event: MouseEvent): void {
gotoAndPlay(currentFrame + 1);
}

sheepgamebtn.addEventListener(MouseEvent.CLICK, i);
function i(e: Event): void {
var movieArray: Array = ["sheep1"];
var loader: Loader = new Loader();
var index: int = movieArray.length * Math.random();
var url: String = movieArray[index] + '.swf';
trace("Attempting to load", url);
loader.load(new URLRequest(url));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError);
stage.addEventListener("UnloadGame", unloadGame);
addChild(loader);
function loaderComplete(e: Event): void {
trace("Successfully loaded", url);
}
function loaderIOError(e: IOErrorEvent): void {
trace("Failed to load", url);
}
function unloadGame(e: Event): void {
trace("unloaded at last", url)
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError);
loader.removeEventListener("UnloadGame", unloadGame);
removeChild(loader);
loader.unloadAndStop();
}
}

加载新的swf根本不会影响以前加载的swf(即使使用相同的变量)。你需要告诉Flash该怎么做。

完成加载的内容后,您应该做三件事:

  1. 将其从显示器中删除:

    removeChild(loader);
    
  2. 删除所有未弱引用的事件侦听器:

    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
    
  3. 卸载装载机:

    loader.unloadAndStop();
    

完成这些操作后,您可以重用变量并加载到新内容中。

编辑

下面是一个让你的孩子swf触发卸载的例子:

在加载的SWF的主时间线内某处

function unloadGame():void {
if(stage) stage.dispatchEvent(new Event("UnloadGame"));
}

在您的主swf中

loader.load(new URLRequest(url));            
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderComplete); 
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
stage.addEventListener("UnloadGame", unloadGame);
addChild(loader); 
function unloadGame(e:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loaderComplete); 
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
loader.removeEventListener("UnloadGame", unloadGame);
removeChild(loader); 
loader.unloadAndStop();
}

最新更新