我不熟悉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。
答案 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