2011-08-16 134 views
2

我已經通過類似的問題,看起來在這個網站並不能找到一個解決方案中的一個影片剪輯中主要時間,所以這裏是我的問題:AS3的Flash調用從影片剪輯

我有一個保存功能保存一些數據。該功能位於另一個影片剪輯中的1個影片剪輯中。保存後,我想gotoAndStop(1)的主要時間線不是當前嵌套的...任何人都可以幫忙嗎?

下面是代碼:

function save() 
{ 

    var oldname:String = so.data.username; 
    so.data.username = oldname + tf.text + " " + nf.text + "\n"; 
    tf.text = ""; 
    nf.text = ""; // resets textfields 
    so.flush(); // writes changes to disk 
    trace("Saved"); 
    gotoAndStop(1); <<----this must goto frame 1 of the main time line?? 
} 

這是AS3。在AS2中,我曾經能夠調用_root。或_parent。這將工作得很好,但現在它會引發編譯器錯誤。 Stage.gotoAndStop(1);也不起作用......

得到任何幫助, 在此先感謝 Luben

回答

4

可以使用root訪問最頂級DisplayObject。由於DisplayObject沒有gotoAndStop()方法,試圖root.gotoAndStop()將導致:

1061:調用可能未定義的方法gotoAndStop通過靜態類型flash.display使用一個參考:的DisplayObject。

但是,您可以typecastrootMovieClip ,這將授予訪問它:

MovieClip(root).gotoAndStop(1); // or: 
(root as MovieClip).gotoAndStop(1); 

類型映射到MovieClip也將允許您訪問在主時間軸上的用戶定義的屬性和功能 - 這是因爲MovieClips是dynamic,它會降低您允許在對象上訪問的屬性和方法的編譯時間限制。


除了在你有一個文檔類繼承Sprite而不是MovieClip案件。

1

我不會在Flash Timeline上做很多編碼(如果您的應用程序甚至具有中等複雜度,我建議您開始考慮使用通過Document Root的外部類定義);但以下建議仍然適用。

在AS3中,在顯示列表上分派的事件可以將其bubbles屬性設置爲true,這將啓用事件冒泡。通過啓用事件冒泡功能,您可以在顯示列表上聆聽更高級別的信息,the following article可以通過可以玩的演示來解釋它。

在您的應用程序,讓我們假設你有行動的兩個 「塊」,將save功能定義和main函數定義:

主要

// Add an event listener, when we hear a 'SaveEvent' we will call 
// the onSaveEvent function. 
addEventListener("SaveEvent", onSaveEvent); 

// This function is called when we hear a 'SaveEvent'. 
function onSaveEvent(event : Event) : void { 
    trace("Main heard event: " + event.type); 

    // We can now instruct our Main Timeline. 
    gotoAndStop(1); 
} 

保存

// Perform your save operation as before... 
so.flush(); // writes changes to disk 
trace("Saved"); 

// Now dispatch an Event, make sure we set it to bubble. 
var bubbles : Boolean = true; 
dispatchEvent(new Event("SaveEvent", bubbles)); 
0

//因此你可以去你場景中的第一幀1

MovieClip(root).gotoAndStop(1, "Scene 1");