2011-10-14 99 views
1

我有一個父SWF有三個按鈕:下一個按鈕,後退按鈕,股票開啓/關閉按鈕。 我有三個孩子的swfs,每個都有一個ticker mc。當我點擊家長swf 上的ticker按鈕時,它會發送一個自定義事件,它將在舞臺上顯示ticker MC,因此ticker變得可見(ticker off按鈕通過更改ticker_mc.y的值將其移出舞臺)。 我面臨的問題是,當ticker打開時,我點擊下一個或後退按鈕來加載下一個或上一個孩子swf,這個ticker會熄滅。我怎樣才能確保股票報價器一直處於關閉狀態,並且只有在關閉時才關閉。一個加載的孩子swf 1如何與下一個孩子swf,當前沒有加載的孩子swf 2進行通信,因爲swf 1上的代碼是開啓的,所以請保留swf 2上的代碼?如何可以加載子SWF 1通信到下一個子SWF,子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

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

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

}

//要關閉自動收報機(默認)

//定單活性按鈕。在默認情況下(不在舞臺上),代碼掩碼是關閉/不可見的。

thisMC.tickerMaskMC.y = 160; 

//自定義事件收到子SWF

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

}

+0

MMM ,不是很瞭解所有的事情。但是你有一些代碼片段可以在這裏發佈嗎? – pkyeck

+0

我已經添加了很多代碼我猜,請你幫忙 –

回答

0

使用父SWF文件作爲控制器的所有子SWF文件的的。

當孩子swf想要與另一個孩子通信時,發送一個事件或打電話給父母swf,然後回退到您想要接聽電話的另一個孩子swf。

雖然在你的例子中,聽起來更像是你有一個分層問題,而不是溝通問題。如果您希望確保單擊「下一步」或「後退」時,如果股票代碼處於活動狀態,它將保持活動狀態,然後確保將新的swf加載到股票代碼DisplayObject後面的DisplayObject中。在這種情況下,兩個DisplayObject都是您加載的swf。

查看DisplayObject的getChildAt和addChildAt方法。添加到舞臺或其他DisplayObject的第一個DisplayObject將具有索引0,第二個將爲1等等。使用你應該能夠正確層的股票永遠留在上面,並顯示,當你希望它是從您的意見

更新:
你可以看看所謂的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

+0

感謝您的回覆。如果我錯了,請糾正我。我不認爲這是一個分層問題,因爲當我加載子SWF 2時,子SWF 1被卸載(使用unloadAndStop)並從舞臺上刪除。我知道我想要做什麼,但我無法編寫代碼。我將解釋:當第一個孩子swf被加載時,ticker_mc.y的默認值應該是160.我想把這個值保存在一個變量中。當我點擊ticker active btn時,ticker_mc的位置變爲194,所以變量的值應該變爲194.當我點擊下一個btn時,應該將變量值(160或194)發送給下一個孩子,並且 –

+0

和ticker_mc的位置應該等於變量值(160或194)。我將添加一些代碼,以幫助您更好地理解我的問題。感謝 –

+0

父代碼中的swf:var whatEver:Number = 194; thisLoader.contentLoaderInfo.addEventListener(Event.INIT,初始化);函數初始化(e:Event){MovieClip(thisLoader.content).myVariable = whatEver; //將子變量的值設置爲它自己的值。 MovieClip(thisLoader.content).updateTextField(); //在孩子中調用一個函數來顯示它} code in child swf:var myVariable:Number = 150;函數updateTextField():void {trace(myVariable +「child 1」); if(myVariable == 194){tickerMaskMC.y = 194; }} updateTextField(); –