Я создал динамическое текстовое поле и установил для 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 .
Есть идеи, что здесь происходит?