簡體   English   中英

DisplayObjectContainer 變成 Flex 組件……如何?

[英]DisplayObjectContainer into Flex component… how?

我將重新寫下這個問題,以便更清楚。

我正在嘗試從 Flash 獲取 class 文件到 Builder 中。

class 中的所有內容都位於名為mainContainer的 Sprite 中。 現在我正在嘗試將保存 class 圖形的“mainContainer”放入 Flex 應用程序。

這被證明是一個問題,因為他們有很多不同的方法(似乎通過大量的谷歌搜索)。

首先,我聲明了一個 MXML Canvas,里面有一個圖像(正如我所讀的那樣):

<mx:Canvas x="268" y="10" width="756" height="680" id="canvas">
    <mx:Image id="spriteLayer" x="268" y="0" width="756" height="700" scaleContent="false" autoLoad="true">

    </mx:Image>
</mx:Canvas>}

好的,然后我的計划是將spriteLayer的圖像引用她傳遞給我正在嘗試運行的 class:

            import includes.Spirograph;
            public var spiro:Spirograph = new Spirograph(spriteLayer);

不幸的是,它只會將null傳遞到 Spirograph class 中:

        function Spirograph(canvasImage:Image):void
        {   
            this.canvas = canvasImage;
            mainContainer.graphics.beginFill(0xFFFFFF);
            mainContainer.graphics.drawRect(290, 0, 670, 700);
            mainContainer.graphics.endFill();

            ui.addChild(mainContainer);
            canvas.addChild(ui);
}

不知道該怎么辦。

非常感謝。

我認為您需要閱讀Flex Component LifeCycle 很可能在調用new Spirograph(spriteLayer)代碼時 spriteLayer 組件尚未創建或初始化。 什么時候調用該代碼?

Flex 組件生命周期是一系列創建 Flex UI 的方法和事件。 您可以覆蓋這些方法,或收聽這些事件以“做事”。 canvas 和 spritelayer 直到調用 createChildren 方法后才會創建; 並且在此之前定義默認屬性值。

您可以覆蓋 createChildren() 並在那里進行初始化:

override protected function createChildren():void{
 super.createChildren()
 spiro  = new Spirograph(spriteLayer);
}

或者您可以收聽初始化事件並在其中設置默認值:

<mx:MyParentComponent initialize="onInitialize()">
 <fx:Script>
   protected function onInitialize():void{
    spiro  = new Spirograph(spriteLayer);
  }
 </fx:Script>
</mx:MyParentComponent>

正如另一位發帖人評論的那樣,您也可以在 creationComplete 事件中進行初始化(如上所示),盡管我個人建議不要這樣做。 creationComplete 事件在生命周期的最后分派; 並且您所做的更改很可能會導致渲染器事件“重新啟動”,從而迫使大部分生命周期再次解析; 組件將被調整大小(measure())並重新定位元素(updateDisplayList())。 建議在生命周期中盡早設置默認值。

對於 flex 4 - 使用http://docs.huihoo.com/flex/4/spark/core/SpriteVisualElement.html

您的精靈,如果它是自定義 class 擴展精靈,則改為擴展 SpriteVisualElement。 否則只需將其填充到 UIComponent 中,因為 UIComponent 支持 addchild,而它可以像普通的 flex 控件 (addElement) 等一樣在 flex 中處理。

到目前為止,如果此 sprite 嵌入在符號名稱為 SpriteTest 的 flash swc 中。 在 flex 中,你可以將它添加到另一個組件中,比如 soo...

在 mxml 中放置一個 UIComponent,給它一個 id... 在腳本中說 ucSpriteHolder,var mcMySprite:Sprite = new SpriteTest(); ucSpriteHolder.addChild(mcMySprite)

如果你在做public var spiro:Spirograph = new Spirograph(spriteLayer); <fx:Script>標記內,將其移動到 canvas creationComplete事件處理程序應該會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM