Как я могу расположить многострочное текстовое поле (динамическое, с центром по тексту) по вертикали в другом видеоролике?

#flash #actionscript-3 #actionscript #flash-cs4

#flash #actionscript-3 #actionscript #flash-cs4

Вопрос:

Обычно, чтобы центрировать экземпляр на сцене по другому вертикально-горизонтальному, вы можете использовать простую логику и ссылаться на ширину, высоту, координаты x и y соответствующих символов.

Это кажется невозможным на месте, потому что Textfield.height и Textfield.TextHeight сообщают о неправильных значениях. Они возвращают те же значения, которые не отражают фактическую высоту экземпляра на сцене.

введите описание изображения здесь

Я создал этот простой пример, чтобы проиллюстрировать проблему: http://omnom.replete.nu/fails.fla

Спасибо.

Ответ №1:

Возможно, я неправильно понял ваш вопрос, но если нет, то пробовали ли вы этот?

 red.tf.y = red.blue.height / 2 - red.tf.height / 2   red.blue.y;
  

Это центрирование текстового поля (tf) по вертикали в синем поле.

По сути, вы получаете центральную координату y синего прямоугольника, вычитаете центральную координату y текстового поля и затем, наконец, добавляете положение y синего прямоугольника.

Для достижения наилучшего результата вам нужно, чтобы текстовое поле определялось автоматически, а также чтобы видеоролики имели (0, 0) опорные точки.

Это то же самое по горизонтали, но с координатами x и параметром width.

 red.tf.x = red.blue.width / 2 - red.tf.width / 2   red.blue.x;
  

Комментарии:

1. Во второй половине моего вопроса я упоминал, что основная проблема заключается в том, что высота сообщается неправильно. К сожалению, этот ответ не имеет отношения к делу.

2. Я вижу. Тогда я не понимаю, какой размер вы упомянули. Если вы установите автоматический размер текстового поля, фактический объект будет окружать введенный вами текст, и высота текстового поля будет правильной. Если вы хотите пойти глубже, чем это, то textmetrics — это то, что вы ищете.

3. Пожалуйста, не говорите мне, что оно сообщает правильную высоту. Весь смысл этого вопроса в том, что он не возвращает правильную высоту. Не хочу показаться грубым, если бы вы правильно прочитали вопрос — вы бы это поняли.

Ответ №2:

Высота текстового поля не связана с высотой самого текста.
Высота текста может изменяться по ряду причин. Хорошим примером может быть семейство шрифтов и их размеры.
Для получения этой информации вам нужно использовать текстовые показатели.
ВСЯ ИНФОРМАЦИЯ ЗДЕСЬ

[РЕДАКТИРОВАТЬ]
согласно вашим комментариям, это должна делать последняя строка вашей функции scaleTextToFitInTextField. вам нужно найти центр обоих объектов и вычесть их, затем добавить смещение

 txt.x = cont.width/2 - txt.width/2   cont.x
txt.y = cont.height/2 - txt.height/2   cont.y
  

[ПРАВИТЬ ПРАВИТЬ]
Также удалите эти 2 строки, поскольку они теперь избыточны

 red.tf.x = red.mchammer.x;
red.tf.y = red.mchammer.y;
  

Комментарии:

1. var metrics:TextLineMetrics = myRoot.container.txtLine1.getLineMetrics(0); trace("metrics: " metrics.height); Этот код по-прежнему выдает неправильную высоту. Его высота определенно превышает 7 пикселей.

2. Я могу подтвердить, что код из комментария выше показывает размер текстового поля в пикселях во время разработки. Если я изменю размер шрифта в IDE, это доказано здесь. Также, согласно Adobe, TextField.TextHeight должен возвращать высоту текста в пикселях. В моих случаях это не так. Ссылка Adobe — текстовое поле

3. Известной проблемой в AS2 (IIRC) было то, что показатели шрифта были просто неправильными. Вам следует изучить, чтобы убедиться, что оно дает правильные показания в AS3

4. вы включаете 2-пиксельный верхний желоб и 2-пиксельный нижний желоб?

5. плюс начальный пробел, если он многострочный