0

我创建了一个动态文本字段,并将 autoSize 设置为 true,因此它可以根据需要增长。然后我想使用 _height 值来调整容器图形(语音气泡)的大小。

这是(简化的)代码:

var format:TextFormat = new TextFormat("Arial", 14);
format.color = 0x000000;
format.letterSpacing = -0.2;

var txt:TextField = _root.createTextField("dialog_txt", 150, 10, 10, 150, 0);
txt.multiline = true;
txt.wordWrap = true;
txt.autoSize = 'left';
txt.embedFonts = true;
txt.selectable = false;
txt.text = value;
txt.setTextFormat(format);

然后我尝试将容器的高度设置为 textfield + 5 的高度,但结果太短了。

container._height = txt._height + 5;

我发现通过trace(txt._height)之前添加,即使跟踪值太小,值也会正确。即使只是将 txt._height 分配给临时变量 ( var junk=txt._height;) 也可以解决问题。用几个跟踪函数替换它:

trace(txt._height); //Note: No code between these two calls
trace(txt._height);

返回19.6后紧跟35.2. 好像读取txt._height会导致它重新计算,所以第二次是正确的。

我还尝试了该textHeight属性,该属性似乎在_height被访问后也会重新计算。这个序列,例如:

trace(txt.textHeight); // Returns 15
trace(txt.textHeight); // Returns 15
trace(txt._height);    // Returns 19.6
trace(txt.textHeight); // Returns 31
trace(txt._height);    // Returns 35.2

这是在 AS 2 中,由MTASC编译。

关于这里发生了什么的任何想法?

4

2 回答 2

0

尝试使用height属性而不是_height属性。

于 2011-05-06T21:08:04.710 回答
0

首先,您需要澄清您使用的是 AS2。我认为这意味着您正在运行 Flash 8 或类似的东西(AS3 使用 .height,AS2 使用 ._height)?

可能发生的是计算只发生在新帧上。您是否尝试过使用 setTimeout() 之类的方法稍后调用您的调整大小代码或使用 dispatchEvent 来调整大小?

根据我的经验, autosize 从来没有运行良好。您最好创建一个扩展 Textfield 的类并编写自己的调用 super 的文本函数,然后将文本字段的高度扩展为 _textHeight。在第一次关闭自动调整大小的情况下,该值应该是正确的。

于 2011-05-06T22:01:35.470 回答