2009-02-02 76 views
2

我有一個加載外部SWF文件的Flash文件。我需要能夠將加載的swf文件移動到主時間軸中的下一幀。如何控制一個動態加載的SWF文件

下面的代碼片段:

var request:URLRequest = new URLRequest(file); 
loader.load(request); 
var swfTimeline:MovieClip = loader.content as MovieClip; 
swfTimeline.nextFrame(); 

如果我運行swfTimeline痕跡,我得到一個空對象引用。我想我找到了解決辦法,但現在我遇到的問題是加載的SWF是ActionScript 2,而AS3似乎不想將AS2 SWF作爲普通的影片剪輯處理。

+0

您可以發佈代碼段的代碼進行加載。將更容易向您展示,而不是以通用的方式解釋 – 2009-02-02 19:28:19

回答

2

使用要加載SWF的Loader對象的content屬性。例如...

var swfTimeline:MovieClip = loader.content as MovieClip; 
swfTimeline.nextFrame(); 
+0

這看起來正是我想要做的,但是當我嘗試訪問loader.content時,我得到一個空對象引用。 – 2009-02-02 19:46:43

6

您需要首先在加載器中添加一個事件偵聽器,以便知道何時加載完成。所以從您的代碼段,我建議像

var request:URLRequest = new URLRequest(file); 
loader.addEventListener(Event.COMPLETE, function(event : Event) : void 
{ 
var swfTimeline:MovieClip = loader.content as MovieClip; 
swfTimeline.nextFrame(); 
}); 
loader.load(request); 

許多不同的方式。如果你得到一個空試圖讓的內容來組織這個代碼,但應該做的伎倆

1

,你可能有等待加載完成事件:

swfLoader.addEventListener(Event.COMPLETE, onSwfLoaded); 

一旦swf已完全加載,那麼您將不會再收到null。

有一點需要注意的是,即使在獲得COMPLETE事件之前,swf上的主時間線也會開始運行。你需要在Flash電影的第一幀有stop()來完成你想要做的事......即便如此,它也可能會有問題。有時候主要的時間表有它自己的想法。

在我的項目中,我們最近決定完全清除主時間線,並將電影從符號庫中加載出來......將影片剪輯加載爲符號可以完全控制,但您必須使用變換來正確放置它們(因爲您不再有主舞臺了)。

只要您使用AS3 flash9影片剪輯,就可以完全控制Flex。

享受!

0

就我所知 - AVM2電影(您的AS3電影)與AVM1電影(您的as2 swf)對話的唯一方法是使用LocalConnection對象。

至於你的第一個問題 - 我打的是一樣的......我需要在整個事件觸發前訪問loader.content屬性。

祝你好運!

問候,

克里斯

1

Shouldfnt它是..

loader.currentTarget.content as MovieClip; 
2

如果你想從Flash加載符號到Flex那麼這應該幫助。

loader.contentLoaderInfo.applicationDomain.getDefinition("here linkage name") as Class 

該代碼使得一個MovieClip放置在臺上,與它的基於時間軸的動作(在動畫結束停止命令等)保持不變。一種使用此方法的方法如下:

var c:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("BA_doors") as Class 
_animation = new c() as MovieClip 
addChild(_doors)