【问题标题】:Action script 3.0 issue, my swf not unloading动作脚本 3.0 问题,我的 swf 没有卸载
【发布时间】:2013-03-28 09:10:29
【问题描述】:

在使用 Flash for iOS 应用程序时遇到了一点问题!我有一个按钮“开始”,它加载一个外部 swf。然后我有一个不同的按钮,“home”,它应该做三件事:

  1. 卸载外部 swf
  2. 停止所有声音
  3. 返回第一帧

看起来一切正常,但 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;
}

【问题讨论】:

  • 首先,在卸载后跟踪 swf,看看它是否存在...我猜 swf 会创建一个新声音,所以如果您删除 SWF,声音仍然存在,您可能需要删除声音也是;
  • 如果你没有反编译代码你可能对它有更好的理解。

标签: ios actionscript-3 flash


【解决方案1】:

首先,您不应该在多帧上执行此操作。最好使用外部 .as 文件。 要正确卸载 swf,您需要删除对 swf 本身和 swf 中的对象的所有引用。这包括您应该使用如下弱引用的 EventListener:

// 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;

在你为空后跟踪加载器,看看输出是什么!

【讨论】:

  • 嗨 - 非常感谢您的回答!我不能使用外部 AS 文件,所有代码都必须在主(父)文件上。我在子 swf 中没有任何代码。你是说我需要在一个框架上拥有整个父级的所有代码,我假设框架 1?
  • 还有,你发送的那两个sn-ps代码;他们会去哪里?
  • 对不起,还有一个问题(我是AS3的初学者);我会用什么替换“someObj”?孩子?按钮名称?而且,我会用什么替换“eventName”?还是会一直这样?
  • 它是您现有听众的方案。所以你的听众添加参数 `,false,0,false);以 removeChild 开头的块替换了 else 语句中的块
  • 这样吗? start_button_aboriginal.addEventListener(MouseEvent.CLICK, fl_ClickToLoadUnloadSWF_3,false,0,true);
猜你喜欢
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多