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

时间:2015-04-16 23:36:14

标签: actionscript-3 flash cs4

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

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

我制作了游戏菜单 - 当您选择游戏时 - 按钮会将特定游戏加载到空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();
      }
  }

1 个答案:

答案 0 :(得分:0)

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

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

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

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

    loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, loaderIOError); 
    
  3. 卸载加载程序:

    loader.unloadAndStop();
    
  4. 完成这些工作后,您可以重复使用该变量并加载新内容。

    编辑

    以下是让您的孩子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();
    }