В ActionScript 2, почему этот TextField _height несовместим? - PullRequest
0 голосов
/ 07 мая 2011

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

Есть идеи, что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Прежде всего, вам необходимо уточнить, что вы используете AS2. Я так понимаю, это означает, что вы используете Flash 8 или что-то в этом роде (AS3 использует .height, AS2 использует ._height)?

То, что могло бы произойти, - это вычисление только на новом кадре. Вы пытались использовать что-то вроде setTimeout () для последующего вызова кода изменения размера или dispatchEvent для изменения размера?

Из моего опыта autosize никогда не работал хорошо. Вам гораздо лучше создать класс, расширяющий Textfield, и написать собственную текстовую функцию, которая вызывает super, а затем увеличивает высоту текстового поля до _textHeight. Это значение должно быть правильным в первый раз с автоматическим изменением размера.

0 голосов
/ 07 мая 2011

Попробуйте использовать свойство height вместо свойства _height.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...