2011-04-15 82 views
0

我想在spite內添加uicomponent。這裏是代碼:在sprite內部添加uicomponent

private function make() : void { 
    var circle : Sprite = new Sprite(); 
    circle.graphics.beginFill(0xFF0000, 0.2); 
    circle.graphics.drawCircle(0, 0, 20); 
    var button : Button = new Button(); 
    button.label = "testing..."; 
    var wrapper : UIComponent = new UIComponent(); 

    circle.addChild(button); 
    wrapper.addChild(circle); 
    addChild(wrapper); 
} 

問題是該按鈕被添加,但沒有顯示。如果我反轉 - 添加精靈到uicomponent - 一切正常,但這種方式不起作用。我試圖使用按鈕等invalidate函數......甚至嘗試使「UIMovieClip」,但沒有運氣 - 「按鈕仍然是看不見的。如果我只是做「addChild(button);」 - 它顯示,什麼...請幫助,我做錯了什麼?我如何添加一個按鈕內的精靈?

+0

真正的問題是爲什麼你要添加一個UIcomponent到精靈? – 2011-04-15 20:59:13

+0

我認爲你對階級繼承存在誤解,以及如何實現它們。 – 2011-04-15 21:02:19

+0

只是想讓你知道我把你的代碼從導入相應類的函數中取出,並在第1幀的空白區域運行它,並且它可以工作。我得到一個按鈕,在它的左上角繪製一個四分之一圓,因爲它應該是。所以我的猜測是你要麼覆蓋按鈕或不正確定位 – 2011-04-15 21:10:11

回答

1

簡短的回答,你不能。你可以做的不是使用Sprite,而是使用UIComponent作爲你的圈子。

原因是UIComponent有很多代碼會改變它的行爲方式,包括如何添加和佈局子代。你基本上可以把相同的代碼加入到一個Sprite中,因爲UIComponent擴展了它,但是這將是非常多餘的。這對我很好用:

private function make() : void { 
    var circle : UIComponent= new UIComponent(); 
    circle.graphics.beginFill(0xFF0000, 0.2); 
    circle.graphics.drawCircle(0, 0, 20); 
    var button : Button = new Button(); 
    button.label = "testing..."; 
    var wrapper : UIComponent = new UIComponent(); 

    circle.addChild(button); 
    wrapper.addChild(circle); 
    addChild(wrapper); 
} 
+0

我實際上想要做的是加載一個外部瑞士法郎,然後移動一些動畫片段,並添加一個按鈕。這是一個要求。現在我可以加載和移動,但是當我嘗試添加一個按鈕時 - 沒有任何反應......我只能看到numChildren屬性增加了,就這些了。我如何初始化或顯示動態創建的按鈕? – infeter 2011-04-15 21:06:22

+0

您將無法使用Flex按鈕。你最好使用Movieclip創建你自己的按鈕,或者你知道,實際上修改你正在加載的swf。也許只是把按鈕放在動畫片段上面? – 2011-04-15 21:55:16

1

不幸的是,爲了按照您嘗試使用Sprite的方式使用Sprite,您必須擴展Sprite並實現IUIComponent。

從Flex 3語言參考摘自:

注意:當指定了子參數來 方法 DisplayObject類型,參數必須 實現IUIComponent接口 要添加作爲一個容器的孩子。所有的Flex組件都實現了這個 接口。

Sprite沒有實現IUIComponent,所以你遇到了一個相當典型的問題。與Sprites相比,UIComponent通常不會遇到速度問題,所以我會建議在您的UIComponent上繪圖。如前所述,你可以/擴展Sprite來實現IUIComponent,但這很痛苦。

希望這會有所幫助!

+0

這是錯誤的。 UIcomponents從精靈類繼承。 Sprite類是所有可視組件的基類。 UIcomponent類繼承了Sprite並添加了像鼠標點擊這樣的用戶功能。 – 2011-04-15 20:57:17

+0

是的,那是錯誤的。 :-)好吧,我已經試圖將精靈擴展爲一些將實現IUIComponent的UISprite,但仍然沒有任何結果。該按鈕不顯示。我也通過調試器發現按鈕的「初始化」屬性設置爲「false」。好吧,我試圖調用「button.initialize()」,我也試圖設置:button.explicitWidth = button.explicitHeight = 100;但仍然沒有運氣......如果「圈子」是UIMovieClip也是如此......也許我需要爲按鈕調用一些額外的特殊方法? – infeter 2011-04-15 21:01:55

+0

我實際上想要做的是加載外部swf,然後在其中移動一些movieclip並添加一個按鈕。這是一個要求。現在我可以加載和移動,但是當我嘗試添加一個按鈕 - 沒有任何反應...我只能看到numChildren屬性增加了,就這些了。我如何初始化或顯示動態創建的按鈕? – infeter 2011-04-15 21:05:46