需要从 Array..cs4 as3 卸载外部 swf
Need to unload an external swf from Array..cs4 as3
我必须将一些绘画变成动画 flash SWF/game(s),其他人会将其变成应用程序。
我有一个打开动画 - 这会导致一个菜单,您可以在其中选择一些东西 - 但现在动画只播放到用户选择游戏的那一帧。
我制作了一个游戏菜单 - 当你 select 一个游戏时 - 该按钮将特定游戏加载到一个空的 MC 中(称为 emptymc - 实例名称 emptymc_MC)
游戏会加载并覆盖整个屏幕,顶层的菜单栏除外 - 在应用程序中始终位于下方。我还没有做出这些选择 - 但它很可能是一个声音切换 - 访问网站 - 购买完整的应用程序。
理想情况下,我希望它完成到最后一帧,然后自行卸载或移除。同时,SWF 显示在下方。我的问题是我无法摆脱我导入的 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 该怎么做。
加载完内容后,您应该做三件事:
将其从显示中删除:
removeChild(loader);
删除任何非弱引用的事件侦听器:
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError);
卸载装载机:
loader.unloadAndStop();
完成这些操作后,您可以重用变量并加载新内容。
编辑
这里是让您的 child swf 触发卸载的示例:
在 Loaded 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();
}
我必须将一些绘画变成动画 flash SWF/game(s),其他人会将其变成应用程序。
我有一个打开动画 - 这会导致一个菜单,您可以在其中选择一些东西 - 但现在动画只播放到用户选择游戏的那一帧。
我制作了一个游戏菜单 - 当你 select 一个游戏时 - 该按钮将特定游戏加载到一个空的 MC 中(称为 emptymc - 实例名称 emptymc_MC)
游戏会加载并覆盖整个屏幕,顶层的菜单栏除外 - 在应用程序中始终位于下方。我还没有做出这些选择 - 但它很可能是一个声音切换 - 访问网站 - 购买完整的应用程序。
理想情况下,我希望它完成到最后一帧,然后自行卸载或移除。同时,SWF 显示在下方。我的问题是我无法摆脱我导入的 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 该怎么做。
加载完内容后,您应该做三件事:
将其从显示中删除:
removeChild(loader);
删除任何非弱引用的事件侦听器:
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError);
卸载装载机:
loader.unloadAndStop();
完成这些操作后,您可以重用变量并加载新内容。
编辑
这里是让您的 child swf 触发卸载的示例:
在 Loaded 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();
}