-2

我正在尝试将许多外部 swf 文件加载和卸载到主要的空白 swf 中。并使用位于外部加载的子页面上的导航按钮(下一步/返回)进行导航(加载和卸载页面)。

我试图将事件从子级分派到主级以卸载。它只适用于第一页,因为调度程序只冒泡一次。

我在主 swf 上有一个要加载的默认页面和调度程序侦听器,如下所示:

var cont:Sprite= new Sprite();

var swfLoader:Loader = new Loader();

var swfFile:URLRequest = new URLRequest("Page1.swf"); //default page

addChild(cont);

swfLoader.load(swfFile);

cont.addChild(swfLoader);


swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoadedHandler);

function swfLoadedHandler(event:Event):void {

MovieClip(event.currentTarget.content).addEventListener("eventTriggered", removeLoader);

}


function removeLoader(event:Event):void {

SoundMixer.stopAll();
this.swfLoader.unloadAndStop();
this.removeChild(cont);
this.cont = null;


swfLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, swfLoadedHandler);

trace ("dispatched");

}

子 page1.swf 上的下一个按钮代码如下所示:

nxt_pg.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_8);

function fl_MouseClickHandler_8(event:MouseEvent):void {

content_mc.gotoAndStop(1);

dispatchEvent(new Event("eventTriggered", true));

SoundMixer.stopAll();

//Code of Loading new page here
}

后退按钮的代码相同。

所以,我想知道是否有人可以用代码或更好的技术帮助我。在此先感谢您的帮助。

4

1 回答 1

0

我通过从子 SWF 中删除 Next 和 Back 按钮并将其放在影片剪辑内的容器上并根据需要更改其可见性来解决此问题。

在索引页 (page0.swf) 我只需设置 'buttons_mc.visible = false;' 并使其在其余页面可见。

这里最重要的是使用 'addChildAt(myLoader,0)' 而不是 'addChild(myLoader)' 在加载的 SWF 上制作按钮影片剪辑。

所有这些仅在容器代码上完成,无需对外部加载的 SWF 进行任何额外的编码。

下面是容器 swf 的代码:

import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.MouseEvent;

var swfNumber=0;
var myLoader:Loader = new Loader();
var myRequest:URLRequest = new URLRequest("swf/"+"Page"+swfNumber+".swf");

buttons_mc.visible = false;
myLoader.load(myRequest);    
addChildAt(myLoader,0);// will be added under the buttons layer
trace(getChildIndex(myLoader));

//==============    

buttons_mc.nxt_pg.addEventListener(MouseEvent.CLICK, nextSwf);
function nextSwf(event:MouseEvent){
    if(swfNumber<totalSwf){swfNumber++}
    else (swfNumber=0);
    reload();
    trace("Next");
    }

buttons_mc.prv_pg.addEventListener(MouseEvent.CLICK, previousSwf);
function previousSwf(event:MouseEvent){
    if(swfNumber>1){swfNumber--}
    else (swfNumber=0);
    reload();
    trace("Back");
    }

//==============

function reload(){
    if (swfNumber==0){buttons_mc.visible = false;}
    else (buttons_mc.visible = true);
    myLoader.unloadAndStop();
    removeChild(myLoader);
    myRequest= new URLRequest("swf/"+"Page"+swfNumber+".swf");
    myLoader.load(myRequest);
    addChildAt(myLoader,0);
}
于 2013-08-30T02:00:41.137 回答