如何将加载的子swf 1传递给当前未加载的下一个子swf,子swf 2

时间:2011-10-14 16:51:23

标签: actionscript-3

我有一个带有三个按钮的父母swf:下一个按钮,后退按钮,自动收报机开/关按钮。 我有三个孩子swfs,每个都有一个自动收报机。当我点击父母swf上的自动收报机按钮时 它会调度一个自定义事件,它会将自动收报机MC带到舞台上,因此自动收报机变得可见(自动收报机关闭按钮会通过更改ticker_mc.y的值将其移出舞台)。 我面临的问题是当股票代码开启并且我点击下一个或后退按钮以加载下一个或上一个子swf时,股票代码就会消失。如何确保自动收报机始终处于开启状态,并且仅在我关闭它时关闭。加载的儿童swf 1如何与下一个儿童swf,当前未加载的儿童swf 2进行通信,因为自动收报机在swf 1上开启所以你也可以将自动收报机保持在swf 2上?!

我想我知道这个问题。我已经在每个子swf上放置了一个默认值ticker_mc = 160(使自动收报机无效)。因此,每次加载新的子swf时,自动收报机都会变为非活动状态。如果有人可以指导我该怎么做,我的问题将得到解决:当第一个子swf被加载时,ticker_mc.y的默认值应该是160.我想在变量中保存这个值。当我点击ticker active btn时,ticker_mc的位置变为194,因此变量的值应该变为194.当我点击下一个btn时,应该将变量值(160或194)发送到下一个子swf并且ticker_mc.y应该是等于变量值。

这是到目前为止的代码

“下一步按钮”

go_mc.next_btn.addEventListener(MouseEvent.CLICK, playNext);

function playNext(e:MouseEvent):void {
if (swf_no < (clips.length-1)) {
    swf_no++;

    SoundMixer.stopAll();
    nextClip();

    pp.play_btn.visible=false;
    pp.pause_btn.visible=true;


}

}

function nextClip():void {
    thisLoader.load(new URLRequest(clips[swf_no]));

}

//每次点击下一个或后退按钮时,都会调用此事件,并从舞台上删除之前的swf。

thisLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, doneLoading);
function doneLoading(e:Event):void {

stopAllChildMovieClips(stage);
stage.removeChild(thisMC);

thisMC=MovieClip(thisLoader.content);
thisLoader.unloadAndStop();

thisMC.x=37;
thisMC.y=78.50;

stage.addChild(thisMC);
playAllChildMovieClips(stage);

}

//父swf上的Ticker活动按钮

viewUnviewTxt_mc.viewTxt_btn.addEventListener(MouseEvent.CLICK, viewText);

function viewText(e:MouseEvent):void{
var viewText:String = "viewTxtFunc";
dispatchEvent (new Event(viewText, true));

}

//关闭自动收报机(默认)。默认情况下,Ticker蒙版是不可见的(在舞台之外)。

thisMC.tickerMaskMC.y = 160;

//在子swf上收到的自定义事件

parent.stage.addEventListener("viewTxtFunc", eventHandler);
function eventHandler(e:Event):void{
tickerMaskMC.y = 194;

}

1 个答案:

答案 0 :(得分:0)

使用您的父swf作为所有子swf的控制器。

当孩子swf想要与另一个孩子交流时,发送一个事件或打电话给父母swf然后再回到你想接听电话的另一个孩子swf。

虽然在您的示例中,听起来更像是一个分层问题而不是通信问题。如果您想确保当您单击下一个或后退时,如果自动收报机处于活动状态,它将保持活动状态,然后确保将新swf加载到自动收报机DisplayObject后面的DisplayObject中。在这种情况下,两个DisplayObject都是你加载的swf。

查看DisplayObject的getChildAt和addChildAt方法。添加到舞台或另一个DisplayObject的第一个DisplayObject的索引为0,第二个将为1,依此类推。使用它你应该能够正确地将您的自动收报机分层,以便始终保持在最佳位置,并在您想要它时显示

从您的评论中更新:
您可以查看名为LoaderContext的Object。它有一个名为parameters的属性,它是一个对象,您只需传递SWF的加载请求。

var lc:LoaderContext = new LoaderContext;
var thisLoader:Loader = new Loader();
lc.parameters = { "tickerHeight" : "myVariable" };
thisLoader.load(new URLRequest(clips[swf_no]), lc);

然后在孩子swf尝试:
trace(loaderInfo.parameters.tickerHeight);

我忘了添加它,你编译的SWF目标必须至少是10.2或更高版本才能使用LoaderContext