Получение ссылки на текстовое поле для динамического изменения шрифта - PullRequest
0 голосов
/ 04 июля 2011

Я не знаком с Flash и ActionScript, и мне нужна помощь для динамического изменения шрифта текстового поля на основе значения flashvar.У меня есть флэш-шаблон, содержимое которого я могу редактировать через XML.Значение flashvar указывает язык и указывает на другой файл XML.Это работает без проблем, и я нашел в Интернете способ изменить шрифт с помощью Actionscript.Однако мне нужна помощь, как получить ссылку на это текстовое поле.

Есть два файла: .fla и Main.as.В файле fla есть одна сцена, и когда текстовое поле выбрано, свойства отображают «thisLogo» в качестве имени и «Dynamic Text» в поле со списком ниже.В файле Main.as я попытался добавить следующий код:

//...
public class Main extends MovieClip {
    private var _root = root as MovieClip;
private var _parent = parent as MovieClip;

private var xmlURL:String = 'xml/main.xml';
    //...

    public function Main() {
        var myflashvars:Object = new Object();
    if (!this.loaderInfo.parameters.language){
            myflashvars = {language: ""};
    } else{
    myflashvars = this.loaderInfo.parameters;
    }

        var langvar:String = myflashvars['language'];
    xmlURL = 'xml/main' + langvar + '.xml';

        var myformat:TextFormat = new TextFormat();
    myformat.font = "Arial";
    //thisLogo.embedFonts = true;

        //This is the part I do not know how to reference the textbox from the code.
    _root.thisLogo.setTextFormat(myformat);
        //I have also tried:
        //this.thisLogo.setTextFormat(myformat);
        //thisLogo.setTextFormat(myformat);

Очевидно, что я получаю следующую ошибку:

1119: доступ к неопределенному свойству thisLogo через ссылкусо статическим типом Main.

1 Ответ

0 голосов
/ 04 июля 2011

Сначала я бы предложил добавить оператор if, который проверяет, является ли свойство stage объекта Main нулевым, перед выполнением остальной части кода. Если он нулевой (обычно это не так), вы можете добавить прослушиватель событий, который прослушивает ваш Main объект, который будет добавлен на сцену:

if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);

Затем вы получаете ссылку на свое текстовое поле и сохраняете ее в локальном TextField объекте, вызывая метод getChildByName() свойства stage свойства и анализируя имя вашего текстового поля (я предполагаю, что оно "thisLogo"?) , Затем вы конвертируете объект DisplayObject, возвращенный методом getChildByName(), в TextField.

var thisLogo:TextField = TextField(stage.getChildByName("thisLogo"));

Теперь попробуйте

thisLogo.setTextFormat(myformat);

В целом это должно выглядеть так:

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

    public class Main extends Sprite 
    {
        private var xmlURL:String = "xml/main.xml";

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var myflashvars:Object = new Object();

            if (!this.loaderInfo.parameters.language)
            {
                myflashvars = { language: "" };

            }
            else
            {
                myflashvars = this.loaderInfo.parameters;

            }// end else

            var langvar:String = myflashvars['language'];
            xmlURL = 'xml/main' + langvar + '.xml';

            var myformat:TextFormat = new TextFormat();
            myformat.font = "Arial";

            var thisLogo:TextField = TextField(stage.getChildByName("thisLogo"));
            thisLogo.embedFonts = true;
            thisLogo.setTextFormat(myformat);

        }// end function

    }// end class

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