繁体   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