0

我有一个 swf 文件加载到主电影中。当孩子玩完,即到达最后一帧时,我想卸载 swf。谁能告诉我我可以在这段代码中添加哪些位?

//start button

start_button_aboriginal.addEventListener(MouseEvent.CLICK, fl_ClickToLoadUnloadSWF_3,false,0,true);

import fl.display.ProLoader;
var fl_ProLoader_3:ProLoader;

var fl_ToLoad_3:Boolean = true;

function fl_ClickToLoadUnloadSWF_3(event:MouseEvent):void
{
//ADDED APR02 START
    fl_ProLoader_3.contentLoaderInfo.addEventListener(Event.INIT, childInitHandler);
    fl_ProLoader_3.load(new URLRequest("myths/myth_aboriginal.swf"));
//ADDED APR02 END

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
{
removeChild(fl_ProLoader_3);
fl_ProLoader_3.unloadAndStop();
fl_ProLoader_3 = null;
}
// Toggle whether you want to load or unload the SWF
fl_ToLoad_3 = !fl_ToLoad_3;

 }
4

2 回答 2

2

你可以

1) 使用 MovieClip 类中定义的未记录的 addFrameScript 函数在子 SWF 的最后一帧上放置回调。如果您无法控制加载的 SWF 中的代码,这很有用。

addFrameScript() 具有以下签名:

addFrameScript(frameNumber, callback); //frameNumber is zero-based (unlike in the Flash authoring suite, here you would enter 0 to refer to the first frame, and 1 for the second.)

在父 SWF 中,添加以下内容:

function fl_ClickToLoadUnloadSWF_3(event:MouseEvent):void {
    ...
    fl_ProLoader_3.contentLoaderInfo.addEventListener(Event.INIT, childInitHandler);
    fl_ProLoader_3.load(new URLRequest("myths/myth_aboriginal.swf"));
    ...
}

function childInitHandler(event:Event):void {
    MovieClip(fl_ProLoader_3.content).addFrameScript(MovieClip(fl_ProLoader_3.content).totalFrames-1, unloadChild);
}

function unloadChild() {
    fl_ProLoader_3.unloadAndStop();
}

如果您担心 addFrameScript 消失 - 不要担心。当您将代码放在时间轴上时,所有这些代码实际上都会编译到文档类中的函数中,并通过 addFrameScript 添加帧侦听器。

请记住定义函数unloadChild()

function unloadChild():void {
    fl_ProLoader_3.unloadAndStop();
}

-或者-

2) 当它到达最后一帧时,从加载的 SWF 中调度一个事件。

在子 SWF 的最后一帧中:

this.dispatchEvent(new Event("lastFrameReached"));

在父 SWF 中,添加以下内容:

fl_ProLoader_3.content.addEventListener("lastFrameReached", unloadChild);

-或者-

3) 订阅孩子的 ENTER_FRAME 事件并检查孩子是否在最后一帧。

在父 SWF 中,添加以下内容:

fl_ProLoader_3.content.addEventListener(Event.ENTER_FRAME, checkIfEnded);

function checkIfEnded(event:Event):void {
    if (fl_ProLoader_3.content.currentFrame == fl_ProLoader_3.content.totalFrames) {
        unloadChild();
    }
}

我个人更喜欢 addFrameScript - 在我看来是一个更干净的解决方案。回调运行一次,您无需轮询,也无需修改子 SWF。

于 2013-03-29T16:36:03.540 回答
0

有很多方法可以解决这个问题,并且已经被问过很多次......

也就是说,您无需在子 swf 上创建事件侦听器即可解决此问题的一种方法是定期检查子 swf 的当前帧。如果它是 swf 上的最后一个,则调用 unload 方法。

// once every second, indefinitely.
var tick:Timer = new Timer(1000, 0);
tick.addEventListener(TimerEvent.TIMER, checkSWF);
tick.start();

//Load something to the stage.
var loader:Loader = new Loader();
loader.load(new URLRequest("child.swf")); 
addChild(loader);


function checkSWF(e:Event):void {
    if (loader.content.currentFrame == loader.content.totalFrames) {
        tick.stop(); // stop the timer
        loader.unloadAndStop();
    }
}
于 2013-03-29T16:08:19.950 回答