2011-09-02 34 views
5

我在Flash中創建了一個按鈕,裏面有一個TextField和一個MovieClip,它們都設置了實例名稱。它們覆蓋按鈕的所有4個框架,沒有關鍵幀。按鈕中的實例名稱問題

我發現使用實例名稱我設置我無法訪問的對象,所以我用這段代碼,看看發生了什麼事情:

var obj:DisplayObject = this.m_graphics.btnChange.upState; 
for (var i:int = 0; i < obj.numChildren; i++) 
{ 
    trace("We have an object at " + i + " - " + obj.getChildAt(i) + ": " + obj.getChildAt(i).name); 
    var t:TextField = obj.getChildAt(i) as TextField; 
    if (t == null) 
     continue; 

    trace(" The textfield has text '" + t.text + "'); 
} 

我得到這個作爲輸出:

We have an object at 0 - [object Shape]: instance195 
We have an object at 1 - [object TextField]: instance199 
    The textfield has text 'Change' 
We have an object at 2 - [object MovieClip]: instance203 

因此,他們TextField和MovieClip在那裏,他們剛剛將他們的實例名稱重置爲通用「實例###」。

任何人都知道問題是什麼?如果我使按鈕成爲一個MovieClip,它可以正常工作(儘管我必須自己控制框架)。

我知道不同的方法,我可以用它來解決這個問題,但是這意味着改變了很多東西,我想知道爲什麼的SimpleButton的忽略閃存

設置的實例名稱編輯

尋找到它遠一點,看來即使是在Flash IDE中的按鈕沒有關鍵幀,Flash會創建每個項目(通過upState例如會給我與一個TextField跟蹤的4個實例實例名稱爲「instance2」,而在downState中,實例名稱爲「instance4」)。如果我在一種狀態下更改文本,則不會反映其他狀態。

我在想,在Flash創建的對象,它不是複製了所有屬性正確(即實例名稱)

編輯

我同意,巴蒂爾的回答是一個解決辦法 - 我我自己說,我知道解決問題的不同方法 - 但它忽略了問題,並沒有解決問題(這是我沒有接受它的唯一原因)。我首先來到了SO,看看有人可能知道爲什麼它首先發生(tbh,這看起來像是SDK中的一個bug)。

我也明白「你不應該訪問SimpleButton中的孩子;如果你想要更多的控制,使用Sprite或者MovieClip」參數背後的推理,但我不同意它。 Flash IDE允許您在其中創建具有命名實例的按鈕,而SimpleButton文檔可讓您訪問不同的狀態,因此對我而言,這是可接受的行爲。如果SimpleButton只能用於非常基本的,不可更改的靜態按鈕(也可以考慮本地化),那麼它非常沒用。你可以使用Sprite和MovieClip,但是你必須自己控制不同的狀態,這會變得很笨拙。我有我自己的Button類來處理樣板,但我不應該重寫基本的SDK功能,這就是爲什麼對我來說這是一個錯誤。

我會保持賞金的時間在那裏。如果我什麼都沒有,那我就把它交給謝恩。

+1

shanethehat是絕對正確的,你不能訪問Button中的對象。 – hardik

+0

@Hardik你可以訪問Button中的對象,我在上面的代碼中執行它。如果這是我*不應該*的情況,那麼這是一個不同的故事 – divillysausages

+0

好吧,如果你想用它的狀態按鈕做一些動畫效果,嘗試在按鈕內部創建MovieClip。獨立的影片剪輯UP UP DOWN。 – hardik

回答

5

這是因爲flash.display.SimpleButton類不從DisplayObjectContainer繼承,並且狀態容器也不會DisplayObjectContainer配合:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

基本上,簡單的按鈕都是由它們的定義很簡單。如果你想對內部對象進行更復雜的控制,你將必須使用一個Sprite或MovieClip,並將buttonMode設置爲true。

+1

'SimpleButtons '它們本身不是'DisplayObjects'或'DisplayObjectContainers',但是它們的上,下,下和擊中狀態是這樣的,你首先要找到它們裏面的對象。 – divillysausages

+2

SimpleButton _is_顯示對象。它的繼承是SimpleButton - > InteractiveObject - > DisplayObject - > EventDispatcher - > Object。 – shanethehat

+0

對不起,我想澄清的是我正在查找SimpleButton狀態(upState,downState等)中的對象。他們存在,他們只是沒有設置實例名稱 – divillysausages