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