2009-01-08 93 views
0

我有一个精灵,我做了一些自定义绘图,但我希望容器知道正确放置精灵的位置。要做到这一点,容器需要知道精灵有多大。 UIComponents经历一个测量阶段,但精灵不会。我如何计算精灵的大小?如何计算精灵的大小?

编辑:我正在做Event.ENTER_FRAME中的绘图,它是动画的,所以我不能提前告诉它会有多大。 UIComponent有一个度量函数,我想创建类似的东西。

回答

2

准确的答案,据我所知,你不能提前告诉,你必须真正画出精灵来决定它的大小。

1

精灵采用您在其中绘制的大小。它没有任何大小,直到你绘制了一些东西。如果你的应用程序允许你可以先画一个边框(可能是矩形),然后测量精灵。但以后不要在国外画画。

0

看看这里 - 我希望这回答了你的问题:

<?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> 

如果你运行它,跟踪语句应显示所绘制的雪碧,这是随机生成的高度和宽度。换句话说,只需查询其高度和宽度属性即可获取精灵的高度和宽度。

+1

只要记住,宽度不考虑其中的DisplayObject的图形,所以,如果你在X负绘图或y,你需要使用的getBounds(),以确保你可以正确定位它。 – grapefrukt 2009-01-09 10:29:40

0

如果您需要根据Sprite宽度和高度来布局其他一些组件,但在实际绘制它之前,可以在一个flash.display.Shape对象上绘图,将此大小用作参考,然后将该形状在雪碧。

1

此外,根据您正在绘制的内容,您可能可以使用数学预先计算最终大小。

即,如果你正在绘制一个圆,你可以使用Math来计算出最终的高度/宽度。

迈克