为什么不能直接设置"defaultTextFormat"?
Why can't set "defaultTextFormat" directly?
例如我们可以直接设置一个形状的图形(不需要创建外部Graphics变量):
var my_shape:Shape=new Shape();
my_shape.graphics.beginFill(0);
但这与 defaultTextFormat 不同
以下代码不起作用:
var my_text:TextField=new TextField();
my_text.defaultTextFormat.size=47;
在defaultTextFormat后打点,出现文本格式的代码提示,没有编译错误,但还是不行
我们必须创建一个外部 TextFormat 变量:
var my_text:TextField=new TextField();
var my_format:TextFormat=new TextFormat();
my_format.size=47;
my_text.defaultTextFormat=my_format;
但是为什么不能直接设置呢?
我不喜欢太多变量。
然后解释一下textFormat和Graphics的区别
感谢您的帮助。
my_text.defaultTextFormat = my_format;
my_format 是文本字段的默认文本格式 my_text。 defaultTextFormat
是 TextField
的 属性(值为 my_format)。
my_format.size = 47;
47 是您的 TextFormat my_format 的大小。 size
是 TextFormat
的 属性(值为 47)。
my_text.defaultTextFormat.size = 47;
...但是 size
从来都不是 defaultTextFormat
的 属性。
So you cannot put properties directly on the defaultTextFormat. What
you need to do is to make a text format, set the properties, THEN set
defaultTextFormat = myTextFormat.
关于 defaultTextFormat 的 Adobe 帮助。
当您 access/read 一个 TextField 的 defaultTextFormat
属性(这是行 my_text.defaultTextFormat.size=47;
中发生的事情)时,您最终会返回一个全新的对象。例如,它创建了一个新的 TextFormat 和 returns that.
这里举例说明:
var tf:TextFormat = new TextFormat();
textField.defaultTextFormat = tf;
trace(tf == textField.defaultTextFormat) //false
TextField
对来自 defaultTextFormat
的 TextFormat
和 returns 一无所知。因此,当您更改它时,它不会自动更新任何内容,因为它在生成它的 TextField 中没有作用域。
In order to see the change, you have to reassign the whole object, and
then reassign the text (if you've already set the text).
不幸的是,这意味着您将像在第二个示例中那样进行操作。
这可能是一种有助于防止内存泄漏等问题的高效方法。
这里有一些例子需要进一步考虑:
var txt:TextField = new TextField();
addChild(txt);
var tf:TextFormat;
txt.text = "hi"; //default formatting;
tf = txt.defaultTextFormat; //get the default formatting, which actually returns a brand new object
tf.color = 0xFF0000; //make it red;
//nothing has changed visually
txt.defaultTextFormat = tf; //this won't update it either
//nothing has changed visually
txt.text = txt.text; //now that we've 'changed' the text, you'll see red
例如我们可以直接设置一个形状的图形(不需要创建外部Graphics变量):
var my_shape:Shape=new Shape();
my_shape.graphics.beginFill(0);
但这与 defaultTextFormat 不同
以下代码不起作用:
var my_text:TextField=new TextField();
my_text.defaultTextFormat.size=47;
在defaultTextFormat后打点,出现文本格式的代码提示,没有编译错误,但还是不行
我们必须创建一个外部 TextFormat 变量:
var my_text:TextField=new TextField();
var my_format:TextFormat=new TextFormat();
my_format.size=47;
my_text.defaultTextFormat=my_format;
但是为什么不能直接设置呢?
我不喜欢太多变量。
然后解释一下textFormat和Graphics的区别
感谢您的帮助。
my_text.defaultTextFormat = my_format;
my_format 是文本字段的默认文本格式 my_text。 defaultTextFormat
是 TextField
的 属性(值为 my_format)。
my_format.size = 47;
47 是您的 TextFormat my_format 的大小。 size
是 TextFormat
的 属性(值为 47)。
my_text.defaultTextFormat.size = 47;
...但是 size
从来都不是 defaultTextFormat
的 属性。
So you cannot put properties directly on the defaultTextFormat. What you need to do is to make a text format, set the properties, THEN set defaultTextFormat = myTextFormat.
关于 defaultTextFormat 的 Adobe 帮助。
当您 access/read 一个 TextField 的 defaultTextFormat
属性(这是行 my_text.defaultTextFormat.size=47;
中发生的事情)时,您最终会返回一个全新的对象。例如,它创建了一个新的 TextFormat 和 returns that.
这里举例说明:
var tf:TextFormat = new TextFormat();
textField.defaultTextFormat = tf;
trace(tf == textField.defaultTextFormat) //false
TextField
对来自 defaultTextFormat
的 TextFormat
和 returns 一无所知。因此,当您更改它时,它不会自动更新任何内容,因为它在生成它的 TextField 中没有作用域。
In order to see the change, you have to reassign the whole object, and then reassign the text (if you've already set the text).
不幸的是,这意味着您将像在第二个示例中那样进行操作。
这可能是一种有助于防止内存泄漏等问题的高效方法。
这里有一些例子需要进一步考虑:
var txt:TextField = new TextField();
addChild(txt);
var tf:TextFormat;
txt.text = "hi"; //default formatting;
tf = txt.defaultTextFormat; //get the default formatting, which actually returns a brand new object
tf.color = 0xFF0000; //make it red;
//nothing has changed visually
txt.defaultTextFormat = tf; //this won't update it either
//nothing has changed visually
txt.text = txt.text; //now that we've 'changed' the text, you'll see red