【问题标题】:How can a loaded child swf 1 communicate to next child swf, child swf 2, which is currently not loaded加载的子 swf 1 如何与当前未加载的下一个子 swf、子 swf 2 通信
【发布时间】:2011-10-14 16:51:22
【问题描述】:

我有一个带有三个按钮的父 swf:下一步按钮、后退按钮、自动收报机开/关按钮。 我有三个子 swf,每个都有一个股票代码 mc。当我单击父 swf 上的自动收报机按钮时 它调度一个自定义事件,将ticker MC带到舞台上,因此ticker变得可见(ticker off按钮通过更改ticker_mc.y的值将其移出舞台)。 我面临的问题是当自动收报机打开时,我单击下一个或后退按钮加载下一个或上一个子 swf,自动收报机熄灭。我怎样才能确保自动收报机一直处于开启状态,并且只有在我关闭它时才会关闭。加载的子 swf 1 如何与当前未加载的下一个子 swf、子 swf 2 进行通信,因为 swf 1 上的代码已打开,所以您也请保​​持 swf 2 上的代码?!

我想我知道问题所在。我在每个子 swf 上都设置了ticker_mc = 160 的默认值(使ticker 处于非活动状态)。因此,每次我加载新的子 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;

}

【问题讨论】:

  • 嗯,不是真的什么都懂。但是你有一些可以在这里发布的代码 sn-ps 吗?
  • 我已经添加了很多代码,我猜你能帮忙

标签: actionscript-3


【解决方案1】:

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

当一个子 swf 想要与另一个子 swf 通信时,向父 swf 发送事件或调用,然后返回到您想要接收呼叫的另一个子 swf。

尽管在您的示例中,这听起来更像是分层问题而不是沟通问题。如果您想确保当您单击下一步或返回时,如果代码处于活动状态,它会保持活动状态,那么请确保将新的 swf 加载到位于代码 DisplayObject 后面的 DisplayObject 中。在这种情况下,两个 DisplayObject 都是您加载的 swf。

看一下DisplayObject 的getChildAt 和addChildAt 方法。添加到舞台的第一个 DisplayObject 或另一个 DisplayObject 的索引将为 0,第二个将为 1,依此类推。使用它,您应该能够正确地将您的股票代码分层以始终保持在顶部并在您希望它显示时显示

来自您的 cmets 的更新:
您可以查看一个名为 LoaderContext 的对象。它有一个名为 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

【讨论】:

  • 感谢您的回复。如果我错了,请纠正我。我不认为这是一个分层问题,因为当我加载子 swf 2 时,子 swf 1 被卸载(使用 unloadAndStop)并从舞台上移除。我知道我想做什么,但我无法编写代码。我将解释:加载第一个子 swf 时,ticker_mc.y 的默认值应该是 160。我想将这个值保存在一个变量中。当我点击 ticker active btn 时,ticker_mc 的位置变为 194,因此变量的值应该变为 194。当我点击下一个 btn 时,变量值(160 或 194)应该被发送到下一个子节点并且
  • 并且ticker_mc的位置应该等于变量值(160或194)。我将添加一些代码,以帮助您更好地理解我的问题。谢谢
  • 父 swf:var whatEver:Number = 194 中的代码; thisLoader.contentLoaderInfo.addEventListener(Event.INIT, 已初始化); function initialized(e:Event) { MovieClip(thisLoader.content).myVariable = whatEver;//将子变量的值设置为自己的。 MovieClip(thisLoader.content).updateTextField();//在child中调用一个函数只是为了显示它 } child swf中的代码: var myVariable:Number = 150;函数 updateTextField():void { trace(myVariable + "child 1"); if(myVariable == 194){tickerMaskMC.y = 194; } } updateTextField();
  • 我可以在加载上面的代码时制作代码,当我点击下一个 btn 时它也保持活动状态。现在,我希望这仅在我单击视图 btn 时发生,而不是在子 swf 加载时发生。有人可以帮忙吗?
  • var tickerPos:uint = thisMC.tickerMaskMC.y; addEventListener(Event.ENTER_FRAME, onEnterFrame);函数 onEnterFrame (event:Event):void {tickerPos = thisMC.tickerMaskMC.y;跟踪(thisMC.tickerMaskMC.y);如果我在 doneLoading 函数中编写此代码,我可以根据我是否单击了ticker inactive 或 active btn 来跟踪值 160 和 194。有什么方法可以将这些值(160 或 194)传递给下一个加载的 swf 并相应地定位tickerMaskMC,而不会出现 1009 和 1010 错误。
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2011-08-13
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多