2010-08-09 85 views
1

我試圖嵌入一個swf到我的AS3 Flex項目是這樣的:嵌入式button.swf不會觸發Click事件

[Embed(source = "../assets/next_button.swf")] 
[Bindable] 
protected var nextButtonClass:Class; 
protected var next_btn:MovieClip = next_btn = new nextButtonClass() as MovieClip; 
// ... 
next_btn.addEventListener(MouseEvent.CLICK, onAdChange); 

next_button.swf是AS2及使用Adobe Flash CS4中創建。裏面有一個按鈕。

如果我在next_button.fla中將按鈕符號的類型更改爲movieclip,則在傳遞CLICK事件時沒有問題。

我試圖將next_btn投射到mx.controls.Button和fl.controls.Button類,在這種情況下next_btn變爲null。

順便說一下,按鈕是反應鼠標懸停和單擊事件正確,只是不會傳遞給上面的瑞士法郎。

有沒有什麼辦法可以將Button事件傳遞給我的容器swf?

回答

0

嘗試嵌入和從SWF裏面,而不是整個SWF實例化的符號:

[Embed(source = "../assets/next_button.swf", symbol"MyButton")] 

你顯然需要與按鈕的實際符號名稱,以取代MyButton

這應該讓你更直接地訪問它,因爲它不會被Loader包裹。

+0

我給按鈕名稱 'next_btn的' 和改變的代碼,以便: [嵌入(源= 「../assets/next_button_as3.swf」,符號= 「next_btn的」)] 我得到這些錯誤: 錯誤:定義找不到符號'next_btn' 錯誤:無法轉碼../assets/next_button.swf。 但我得到同樣的錯誤,當我用next_button_as3.swf嘗試它,我做錯了什麼? 我可以跟蹤this.next_btn既SWF文件內,輸出是這樣: AS2 => _level0.next_btn AS3 => [對象next_button] – ekesken 2010-08-09 09:03:59

+0

需要設置一個 「鏈接ID」,而不是一個實例名。 http://www.jessewarden.com/archives/flex/preloader/flash_preloader_03.gif – grapefrukt 2010-08-09 10:15:20

+0

謝謝,我試過了,編譯時沒有錯誤。但「var next_btn:MovieClip = new nextButtonClass()as MovieClip;」代碼這次將空值賦給next_btn變量。一個「新」運算符如何返回空值? – ekesken 2010-08-09 11:02:37

0

我不認爲一個As3腳本可以訪問AS2 SWF的屬性。如果你有權訪問fla,那麼爲什麼不把flas按鈕改成AS3項目呢?

+0

其實我已經寫在同一個項目的AS2和AS3版本。我希望能夠爲這兩個項目使用相同的資產。 資產將由一個設計師團隊準備,我們手中可能沒有cs4來更換flas。 正如你所說,如果資產是as3沒有問題,並且我擔心as2按鈕沒有解決方案。 – ekesken 2010-08-09 08:33:54

+0

有沒有什麼辦法可以將邏輯與設計完全分開。如果你有一個設計師團隊準備資產,這似乎是前進的方向。這樣你就可以同時工作as2和as3。 實際上,這裏真正的問題是設計和邏輯之間缺乏分離。 – PatrickS 2010-08-09 11:03:58

+0

這就是我們如何分離它:)我們的設計師團隊不知道flex,mxml等,他們是二進制的人。 – ekesken 2010-08-09 15:06:11

1

總結,解決grapefrukt建議後,代碼如下:

[Embed(source = "../assets/next_button.swf", symbol="next_button")] 
[Bindable] 
protected var nextButtonClass:Class; 
protected var next_btn:DisplayObject = new nextButtonClass() as DisplayObject; 
// ... 
next_btn.addEventListener(MouseEvent.CLICK, onAdChange);