动作脚本3.0问题,我的swf没有卸载

时间:2013-03-28 09:10:30

标签: ios actionscript-3 flash

使用Flash for iOS应用程序遇到一些麻烦!我有一个按钮“start”,它可以加载一个外部swf。然后我有一个不同的按钮,“home”,它应该做三件事:

  1. 卸载外部swf
  2. 停止所有声音
  3. 返回第1帧
  4. 所有SEEMS都能正常工作,但似乎SWF永远不会卸载!我一遍又一遍地听到它。

      //code on frame follows...mythbutt_home
    
    
     stop();
    
    //home button
    
    mythbutt_home.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame_4);
    
    function fl_ClickToGoToAndStopAtFrame_4(event:MouseEvent):void
    {
    removeChild(fl_ProLoader_3);
    
    }
    mythbutt_home.addEventListener(MouseEvent.CLICK, fl_ClickToStopAllSounds);
    
    function fl_ClickToStopAllSounds(event:MouseEvent):void
    {
    SoundMixer.stopAll();
    }
    
    mythbutt_home.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndStopAtFrame_1);
    
    function fl_ClickToGoToAndStopAtFrame_1(event:MouseEvent):void
    {
    gotoAndStop(1);
    }
    
    
    //start button
    
    start_button_aboriginal.addEventListener(MouseEvent.CLICK, fl_ClickToLoadUnloadSWF_3);
    
    import fl.display.ProLoader;
    var fl_ProLoader_3:ProLoader;
    
    //This variable keeps track of whether you want to load or unload the SWF
    var fl_ToLoad_3:Boolean = true;
    
    function fl_ClickToLoadUnloadSWF_3(event:MouseEvent):void
    {
    if(fl_ToLoad_3)
    {
        fl_ProLoader_3 = new ProLoader();
        fl_ProLoader_3.load(new URLRequest("myths/myth_aboriginal.swf"));
        addChild(fl_ProLoader_3);
        fl_ProLoader_3.x = 114;
        fl_ProLoader_3.y = 41;
     }
     else
     {
        fl_ProLoader_3.unload();
        removeChild(fl_ProLoader_3);
        fl_ProLoader_3 = null;
    }
    // Toggle whether you want to load or unload the SWF
    fl_ToLoad_3 = !fl_ToLoad_3;
    }
    

1 个答案:

答案 0 :(得分:3)

首先,你不应该在多重帧上做这件事。最好使用外部.as文件。 要正确卸载swf,您需要删除swf本身和swf中对象的所有引用。这包括EventListeners,您应该使用这样的弱引用:

// params: eventName, listener, capturePhase, priority, useWeakReference
someObj.addEventListener("eventName",myFunct,false,0,true);

并使用unloadAndStop();并先删除!

removeChild(fl_ProLoader_3);
fl_ProLoader_3.unloadAndStop();
fl_ProLoader_3 = null;

在将null归零后跟踪加载器,看看输出结果是什么!