创建动态矩形

时间:2011-01-03 20:18:00

标签: actionscript-3

您好我想知道如何创建一个动态矩形,其中包含一些文本,文本是动态的,因此矩形必须适应文本的长度。关于如何处理这个的任何想法?

3 个答案:

答案 0 :(得分:0)

这是单行文本的基本内容:

import flash.display.Sprite;
import flash.text.TextField;

var rectClip:Sprite = new Sprite();

var rect:Sprite = new Sprite;
rect.graphics.beginFill(0xff0000, 1);
rect.graphics.drawRect(0, 0, 100, 100);
rect.graphics.endFill();

var tf:TextField = new TextField();
tf.autoSize = "left";
tf.text = "Lorem ipsum dolor sit amet...";

addChild(rectClip);
rectClip.addChild(rect);
rectClip.addChild(tf);

rect.width = tf.textWidth + 12;
rect.height = tf.textHeight + 12;
tf.x = Math.round(rect.width/2 - tf.width/2);
tf.y = Math.round(rect.height/2 - tf.height/2);

罗布

答案 1 :(得分:0)

另一种方法,如果你想在Flash中绘制矩形而不是动作脚本(尽管上面的方法可能更有用)。

创建一个带矩形的图层。

使矩形成为某种图形或精灵,并将其设置为9切片缩放。这样,矩形将使用文本框正确缩放(如果它是圆角矩形,则很好)

同时为矩形选择Linkage并为其指定一个类名(例如“背景”)

public var textBackground:Background; // can make public or private depending if you leave it on the stage or generate it
private var myTextField:TextField;

然后有两个功能:

private function createTextField():void
{
// create your textfield here using actionscript
myTextField = new TextField();
// customize your textfield
}

private function createTextBackground():void
{
        textBackground = new Background;
        textBackground.height = myTextField.height + 20;
}

然后:

createTextField();
createTextBackground();
addChild(textBackground);
addChild(myTextField);

我通常会根据文字更改高度,并将宽度设置为固定宽度,并按照我喜欢的方式设置我的定位。

答案 2 :(得分:0)

如果TextField是多线,则需要设置固定宽度,然后可以在格式化后确定TextField高度。

   private var format:TextFormat = new TextFormat();
   private var textWidth:int = 300;
   private var hPadding:int = 10;
   private var vPadding:int = 10;
   private var boxColor:uint = 0x990000;

   private function init():void
   {
      var tf:TextField = getTextField("Your text..........etc...");
      tf.x = hPadding;
      tf.y = vPadding;

      var rectWidth:int = textWidth + ( hPadding * 2);
      var rectHeight:int = tf.textHeight + ( vPadding * 2);

      var container:Sprite = getTextContainer( rectWidth , rectHeight );
      container.addChild( tf );

   }

   private function getTextField( text:String ):TextField
   {
       var tf:TextField = new TextField();
       tf.defaultTextFormat = format;
       tf.autoSize = TextFieldAutoSize.LEFT;
       tf.multiline = true;
       tf.width = textWidth;
       tf.text = text;
       // etc...

       return tf;
   }

   private function getTextContainer(width:int , height:int ):Sprite
   {
        var sp:Sprite = new Sprite();

        with( sp.graphics )
        {
             beginFill( boxColor );
             drawRect( 0 , 0 , width , height );
             endFill();
        }

        return sp;
   }