我有一个精灵,我在其中进行了一些自定义绘图,但我希望容器知道正确定位精灵的位置。为此,容器需要知道精灵有多大。UIComponents 经历了一个测量阶段,但精灵没有。如何计算精灵的大小?
编辑:我正在 Event.ENTER_FRAME 中进行绘图,并且它是动画的,所以我无法提前知道它会有多大。UIComponent 有一个测量功能,我想创建类似的东西。
我有一个精灵,我在其中进行了一些自定义绘图,但我希望容器知道正确定位精灵的位置。为此,容器需要知道精灵有多大。UIComponents 经历了一个测量阶段,但精灵没有。如何计算精灵的大小?
编辑:我正在 Event.ENTER_FRAME 中进行绘图,并且它是动画的,所以我无法提前知道它会有多大。UIComponent 有一个测量功能,我想创建类似的东西。
据我所知,确切的答案是,您无法提前知道,您必须实际绘制精灵以确定它的大小。
精灵采用您在其中绘制的大小。在您在其中绘制某些内容之前,它根本没有大小。如果您的应用程序允许,您可以先绘制边框(可能是矩形),然后测量精灵。但是以后不要画到边界之外。
此外,根据您要绘制的内容,您可以使用数学来预先计算最终尺寸。
即如果你正在画一个圆圈,你可以使用数学来计算出最终的高度/宽度。
麦克风
看看这里——我希望这能回答你的问题:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
private var s:Sprite;
private var w:UIComponent;
override protected function createChildren():void
{
super.createChildren();
if (!s)
s = getSprite();
w = new UIComponent();
trace("The sprite measures " + s.width + " by " + s.height + ".");
w.addChild(s);
box.addChild(w);
}
private function getSprite():Sprite
{
var s:Sprite = new Sprite();
s.graphics.lineStyle(1, 0xFFFFFF);
s.graphics.beginFill(0xFFFFFF, 1);
s.graphics.drawRect(0, 0, Math.floor(Math.random() * 1000), Math.floor(Math.random() * 1000));
s.graphics.endFill();
return s;
}
]]>
</mx:Script>
<mx:Box id="box" backgroundColor="#FFFFFF" />
</mx:Application>
如果你运行这个,trace 语句应该显示绘制的 Sprite 的高度和宽度,这是随机生成的。换句话说,您可以通过简单地查询它的高度和宽度属性来获得精灵的高度和宽度。
如果需要根据 Sprite 的宽高来布局其他一些组件,但在实际绘制之前,可以在 flash.display.Shape 对象上进行绘制,以此大小为参考,然后将 Shape 附加到 Sprite 上。