【问题标题】:In Actionscript 2, why is this TextField _height inconsistent?在 Actionscript 2 中,为什么这个 TextField _height 不一致?
【发布时间】:2011-05-06 20:43:16
【问题描述】:

我创建了一个动态文本字段,并将 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);

然后我尝试将容器的高度设置为文本字段的高度 + 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 编译。

对这里发生的事情有什么想法吗?

【问题讨论】:

    标签: flash actionscript textfield autosize


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的洞察力。这是 Actionsript 2。
    【解决方案2】:

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

    【讨论】:

    • txt.height 只返回undefined
    • 我认为这意味着您使用的是 ActionScript 1 或 2。您能确认一下吗?
    • 正确,我使用的是 ActionScript 2。
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 2014-05-12
    • 2012-05-07
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2017-05-17
    • 2023-01-04
    相关资源
    最近更新 更多