Flash 获取对文本框的引用以动态更改字体

Flash 获取对文本框的引用以动态更改字体,flash,actionscript-3,Flash,Actionscript 3,我不熟悉Flash和actionscript,需要帮助根据flashvar的值动态更改文本框的字体。我有一个flash模板,我可以通过XML编辑它的内容。flashvar值指定语言并指向不同的XML文件。这工作没有问题,我在网上找到了一种通过actionscript更改字体的方法。但是,我需要关于如何获取对该文本框的引用的帮助 有两个文件.fla和Main.as文件。在fla文件中只有一个场景,当选择文本框时,属性将显示“thisLogo”作为其名称,并在下面的组合框中显示“Dynamic Te

我不熟悉Flash和actionscript,需要帮助根据flashvar的值动态更改文本框的字体。我有一个flash模板,我可以通过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:通过静态类型Main的引用访问可能未定义的属性thisLogo。

首先,我建议添加一个
if
语句,在执行其余代码之前测试
Main
对象的stage属性是否为null。如果为null(通常不是),则可以添加一个事件侦听器,侦听要添加到stage的
Main
对象:

if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
接下来,通过调用
stage
属性的
getChildByName()
方法并解析文本字段的名称(我假设它是“thisLogo”),获取对文本字段的引用,并将其存储在本地
textfield
对象中。然后将
getChildByName()
方法返回的
DisplayObject
对象转换为
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