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

时间:2011-07-04 19:33:38

标签: flash actionscript-3

我不熟悉Flash和动作脚本,我需要帮助来根据flashvar的值动态更改文本框的字体。我有一个Flash模板,其内容我可以通过XML编辑。 flashvar值指定语言并指向不同的XML文件。这没有问题,我在网上找到了一种通过actionscript改变字体的方法。但是,我需要有关如何获取该文本框的引用的帮助。

.fla和Main.as文件有两个文件。在fla文件中有一个场景,当选择文本框时,属性显示“thisLogo”作为其名称,并在下面的组合框中显示“动态文本”。在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。

1 个答案:

答案 0 :(得分:0)

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

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

接下来,您将获得对文本字段的引用,并通过调用TextField属性的stage方法并解析文本字段的名称将其存储在本地getChildByName()对象中(我假设它的“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