#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. плюс начальный пробел, если он многострочный