![](/img/trans.png)
[英]How to get dimensions of only DisplayObjectContainer's *visible* contents?
[英]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.