AS3:当我调整MovieClip的大小时,矢量不会调整大小

时间:2011-03-20 16:04:49

标签: flash actionscript-3

我有点奇怪的问题。有一个MovieClip我调整大小,但矢量图形不会随之调整大小。它是我的库中的一个Movieclip,我正在链接到它,当我将它插入我的舞台时,它调整得很好。

我已将MovieClip导出为名为TabTemplate的AS对象,并且我将其扩展为名为Tab的类。

我在其中定义的文本字段中设置了一些文本,并相应地调整了选项卡的大小。但图形不遵循:(

我不习惯AS3的做事方式,所以可能会有一些我错过的东西。

这是类代码:

package mypackage {
    import flash.display.MovieClip;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class Tab extends TabTemplate {
        function Tab() {
        }

        /*** Getters/Setters ***/
        public function set text( value:String ):void {
            this.tabname.wordWrap = false;
            this.tabname.autoSize = TextFieldAutoSize.LEFT;
            this.tabname.text = value;
            this.tabname.y = (this.mcMask.height - this.tabname.textHeight) /2;
            this.tabname.x = this.tabname.y;
            this.width = this.tabname.width + (this.tabname.x *2);

            // I want to avoide to resize this after resizing the MovieClip
            //this.mcMask.width = this.width; 
        }

        public function get text():String {
            return this.tabname.text;
        }
    }
}

这里实际上有两个问题:

1)textWidth未返回正确的数字。我对文本有一些影子,我不知道是否有任何问题。但除此之外我只是使用普通Arial。

2)当我调整MovieClip的大小时,'Tab'+它的矢量背景的面具没有调整大小,就像在Flash中一样。

2 个答案:

答案 0 :(得分:1)

TabTemplate显然出现了问题。也许最好从头开始。

我已经设置了一个不扩展TabTemplate的类,但是有一个实例作为成员。这样,您就可以将文本和图形分开,但应该能够使剪辑整体调整大小,而不是单独调整其大小。

有两件事对我们来说非常重要:

  1. 您必须从TabTemplate中删除文本字段。它将动态生成。如果要使用嵌入字体,则必须注意嵌入字体样式并设置TextFormat;我没有在那里放任何这样的代码。

  2. 您不能对矢量蒙版使用9切片缩放。如果您有需要9切片缩放的蒙版,则需要更改图形的设置方式,或者在ActionScript中创建绘图机制(例如,如果需要圆角),则在文本被删除时刷新集。

  3. 以下是代码:

    package mypackage {
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.text.TextFieldType;
        import flash.text.TextFieldAutoSize;
    
        public class Tab extends MovieClip {
            private var background : TabTemplate = new TabTemplate();
            private var tabname : TextField = new TextField ();
    
            public function set text( value:String ):void {
                tabname.type = TextFieldType.DYNAMIC;
                tabname.multiline = tabname.wordWrap = false;
                tabname.autoSize = TextFieldAutoSize.LEFT;
                tabname.text = value;
                tabname.y = (background.height - tabname.textHeight) *.5;
                tabname.x = tabname.y;
                addChild (tabname);
    
                background.width = tabname.width + (tabname.x *2);
                addChildAt (background, 0);
            }
    
            public function get text():String {
                return tabname.text;
            }
        }
    }
    

    看看这是否适合您。如果没有,请告诉我您是否收到任何错误消息,然后从那里继续。

答案 1 :(得分:0)

而不是 this.tabname.width

尝试 this.tabname.textWidth

也许有帮助。

我相信你不应该设置整个Tab的宽度(你也要调整文本字段的大小),只设置TabTemplate类中的背景(或任何图形)元素。当您扩展此类时,您将可以访问这些实例。

罗布