【问题标题】:Why can't set "defaultTextFormat" directly?为什么不能直接设置“defaultTextFormat”?
【发布时间】:2015-01-12 18:44:09
【问题描述】:

例如,我们可以直接设置一个形状的图形(无需创建外部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的区别。
感谢您的帮助。

【问题讨论】:

  • 这是一个非常重要的问题。不知道为什么没有评分。

标签: actionscript-3 textfield


【解决方案1】:

当您访问/读取 TextField 的 defaultTextFormat 属性(这就是 my_text.defaultTextFormat.size=47; 行中发生的情况)时,您最终会返回一个全新的对象。例如,它创建一个新的 TextFormat 并返回它。

这里有一个例子来说明:

var tf:TextFormat = new TextFormat();
textField.defaultTextFormat = tf;
trace(tf == textField.defaultTextFormat) //false

TextField 对从defaultTextFormat 返回的TextFormat 一无所知。因此,当您更改它时,它不会自动更新任何内容,因为它在生成它的 TextField 内没有范围。

为了看到变化,你必须重新分配整个对象,并且 然后重新分配文本(如果您已经设置了文本)。

不幸的是,这意味着您将不得不像第二个示例中那样进行操作。

这可能是一种有助于防止内存泄漏等的效率问题。

以下是一些需要进一步考虑的示例:

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

【讨论】:

  • 有人愿意解释否决票吗?如有错误,请指出。
【解决方案2】:
my_text.defaultTextFormat = my_format;

my_format 是您的 textField my_text 的 defaultTextFormat。 defaultTextFormat 是您的 TextField 的属性(其值为 my_format)。

my_format.size = 47;

47 是您的 TextFormat my_format 的大小。 size 是您的 TextFormat 的属性(值为 47)。

my_text.defaultTextFormat.size = 47;

...但是size 从来都不是defaultTextFormat 的属性。

因此您不能将属性直接放在 defaultTextFormat 上。什么 你需要做的是制作一个文本格式,设置属性,然后设置 defaultTextFormat = myTextFormat.

关于 defaultTextFormat 的 Adob​​e 帮助。

【讨论】:

  • 这是正确的答案。从 3 位 BAD 编码员中获得 3 票。大小不是,从来没有成为 defaultTextFormat 的属性。
  • 我不确定这甚至是如何回答这个问题的,更不要说是“正确”的答案了吗? defaultTextFormat 返回一个文本格式,它又具有一个 size 属性。 trace(textField.defaultTextFormat.size) 会追踪出文本域文本格式的大小。
  • 使用 my_text.defaultTextFormat.size 是一种非常糟糕的编码习惯。有人尝试这样做的事实并不是鼓励它的理由。 Adobe 帮助简单地描述了如何使用 TextField、TextFormat 和 defaultTextFormat。这就足够了。让 HITMAN 使用defaultTextFormat.size 将他的最终代码放在这里...我会证明它没有用,而且是一种非常糟糕的做法。
  • 没有人(或曾经)争论尝试在 defaultTextFormat 上设置属性。 @HITMAN 已经知道这样不行,他想知道为什么。
  • @LDMS 他尝试这样做是因为他没有阅读 Adob​​e 帮助,而这不起作用的原因很简单:想在没有创建 textFormat 的情况下设置它的大小当然是不可能的! (my_text.defaultTextFormat.size = 47;) 当 (tf =) my_text.defaultTextFormat 是 TextFormat 时,他认为 defaultTextFormat 是 TextFormat。如果他想在创建 textFormat 之后得到它,他可以得到 my_text.defaultTextFormat 的大小,但是直接调用 tf.这就是为什么我说大小从来都不是 defaultTextFormat 的属性
猜你喜欢
  • 2012-01-10
  • 2011-10-28
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2014-08-01
  • 2014-11-25
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多