AS3: Векторы не меняются при изменении размера моего мувиклипа - PullRequest
1 голос
/ 20 марта 2011

У меня странная проблема. У меня есть MovieClip, я изменяю размер, но векторная графика не меняет его. Это мувиклип в моей библиотеке, к которому я добавляю ссылки, и когда я вставляю его на сцену, он просто отлично масштабируется.

Я экспортировал MovieClip как объект AS с именем: TabTemplate, и я расширил его в классе с именем 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 не возвращает правильный номер. У меня есть какая-то тень на тексте, и я не знаю, испортило ли это что-нибудь. Но в остальном я просто использую Regular Arial.

2) Маска «Tab» + это векторный фон не меняются, когда я изменяю размер мувиклипа, как это происходит во Flash самостоятельно.

Ответы [ 2 ]

1 голос
/ 20 марта 2011

Что-то явно пошло не так с вашим шаблоном TabTemplate. Может быть, лучше начать с нуля.

Я создал класс, который не расширяет TabTemplate, но имеет экземпляр этого класса в качестве члена. Таким образом, вы сможете разделить текст и графику, но сможете изменить размер клипа в целом, а не изменять его части по отдельности.

Для этого важны две вещи:

  1. Вам придется удалить текстовое поле из TabTemplate. Это будет генерироваться динамически. Если вы хотите использовать встроенные шрифты, вам нужно позаботиться о встраивании стиля шрифта и установке TextFormat; Я не вставил туда такого кода.

  2. Нельзя использовать 9-фрагментное масштабирование с векторными масками. Если у вас есть маска, которая требует 9-фрагментного масштабирования, вам нужно будет изменить способ настройки графики или создать механизм рисования в ActionScript (например, если вы хотите скругленные углы), который обновляется после того, как текст был комплект.

Вот код:

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;
        }
    }
}

Посмотрите, работает ли это для вас. Если нет, дайте мне знать, если вы получите какие-либо сообщения об ошибках, и давайте продолжим.

0 голосов
/ 20 марта 2011

вместо this.tabname.width

Try this.tabname.textWidth

Может быть, это поможет.

Я считаю, что вы не должны устанавливать ширину всей вкладки (вы также изменяете размер текстового поля), только фоновые (или любые графические) элементы в классе TabTemplate. По мере расширения этого класса вы будете иметь доступ к этим экземплярам.

Rob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...