【发布时间】:2016-03-30 18:01:25
【问题描述】:
我有以下设置:在 Label.fla 中有一个包含 TextField 的 MovieClip,它的类设置为 src.components.Label。这个类所做的只是在构造函数中设置字体,然后将 TextField 的 text 属性设置为空字符串(字符串的值与此问题无关。它可以是非空字符串并且具有相同的结果)。像这样:
package src.components
{
import flash.display.MovieClip;
import flash.text.TextFormat;
import flash.text.TextField;
public class Label extends MovieClip
{
public var mTextField:TextField;
public function Label()
{
super();
var tf:TextFormat = new TextFormat("Arial", 34, 0xFFFFFF);
mTextField.defaultTextFormat = tf;
mTextField.setTextFormat(tf);
trace("init before: " + mTextField.getTextFormat().font);
mTextField.text = "";
trace("init after: " + mTextField.getTextFormat().font);
}
}
}
Label.fla 中的标签对象设置为导出用于运行时共享,已复制到 MainMenu.fla。此标签的单个实例放置在 MainMenu.fla 的舞台上,当我运行 MainMenu.swf 时,输出清楚地显示正在设置字体,然后立即清除,因为我正在更改 TextField 的文本属性。
输出如下:
init before: Arial
init after: null
为什么设置文本会导致字体被清除?这给我带来了很多问题。我想出解决这个问题的唯一方法是做一些愚蠢的事情,在设置文本之前复制 TextFormat 对象,设置文本,然后重新应用复制的 TextFormat 以确保它不会改变.
我附上了一个包含所有源文件和编译文件的 zip 文件,以进行测试。 FontTest.zip
【问题讨论】:
标签: actionscript-3 flash fonts textfield