Как я могу вертикально центрировать многострочное текстовое поле (динамическое, центрированное по тексту) в другом мувиклипе? - PullRequest
1 голос
/ 21 апреля 2011

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

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

enter image description here

Я создал этот простой пример для иллюстрации проблемы: http://omnom.replete.nu/fails.fla

Спасибо.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

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

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

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

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

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

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

red.tf.x = red.blue.width / 2 - red.tf.width / 2 + red.blue.x;
1 голос
/ 21 апреля 2011

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

[EDIT]
согласно вашим комментариям последняя строка вашей функции 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;
...