需要从 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 该怎么做。

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

  1. 将其从显示中删除:

    removeChild(loader);
    
  2. 删除任何非弱引用的事件侦听器:

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

    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();
}