Просмотр полной версии : Динамический текст: выравнивание по вертикали
Требуется в баннер подгружать текст.
Использую динамический текст. Поскольку вертикальное выравнивание отсутствует, придется размеры и позицию высчитывать на лету, соответственно создавать текстовое поле динамически. Ок, но вот какие проблемы:
1) используется embedded-фонт. Когда я создаю объект TextFormat и применяю его к создаваемому текстовому полю - никакой текст не отображается ВООБЩЕ (если свойство эмбэда ставлю в false - отображается, но все равно проблемы: полностью игнорируются установки TextFormat - текст рисуется черным мелким Times New Roman).
Выравнивание (autoSize = "center") тоже игнорируется...
Где-то слышал, что нужно TextFormat создавать как глобальную переменную: пробовал - не помогло.
2) советуют использовать getTextExtent, чтобы посчитать ширину и высоту блока, но во-первых - пишут, что в 8-й версии Flash эта фигня deprecated, а взамен - ничего нет... кроме того - оно используется для простого текста, а у меня - HTML. Поэтому мне приходится считать количество <BR>, прибавлять единицу, чтобы было кол-во строк. И считать кол-во символов в самой длинной строке, чтобы потом умножить на среднюю ширину символа... Бред. Но кто предложит нормальное решение?? Ей-Богу, странно: задача-то - элементарная! Просто я не знаю, сколько строк может получиться в задаваемом тексте: 1, 2, 3...
P.S. При всём при том к этому тексту у меня должны применяться легкие эффекты: масштабирование, изменение прозрачности... Поэтому я засунул его в movieclip, к которому эти эффекты и применяю. Но всё нормально работало лишь когда текстовое поле было создано "на сцене"... появилась динамика - появились проблемы...
Хм, может в
http://www.flasher.ru/forum/showthread.php?t=65685&highlight=%E4%E8%ED%E0%EC%E8%F7%E5%F1%EA%E8%E9+%F2%E5%EA%F1%F2
что-то по существу есть...
Посмотрю.
Но если у кого дельный совет - прошу!
Собственно если текст в мувике, то тебе достаточно поставить autoSize и с на основании размеров мувика уже ставить его в нужные координаты ...
Да фигня на постном масле! :mad:
1) почему-то текст мой выводится только в последнем кадре, а в анимации клипа-родителя "не участвует", хотя текстовое поле я создаю в onClipEvent(load) этого клипа
2) к маленьким шрифтам вроде бы сглаженность какая-то применяется, хотя не ахти выглядит. Но у меня должен быть большой шрифт (32-й размер примерно) - и выглядит он совершенно без антиалиаса, хотя antialiasType установлено в "advanced"
Nox Noctis
13.12.2005, 15:00
честно говоря, не понимаю, что мешает создать текстовое поле заранее.
создай его необходимой ширины, подключи шрифт обычным способом через настройки в редакторе, а в скрипте напиши только TF.autoSize... Кузен сказал же уже. :)
если ты всё же хочешь создать его динамически - придется немного повозиться.
чтобы меньше было шансов ошибиться, я бы сделал так:
1. создать пустое динамическое текстовое поле в первом кадре ролика
2. подключить в нем нужный шрифт
3. обозвать поле как-нибудь типа embed_plain_txt
4. если нужны болд и италик - следует то же проделать и для них, потому что флэш эти начертания считает разными шрифтами.
т.е. сделать embed_bold_txt, embed_italic_txt, embed_bolditalic_txt по необходимости...
5. в первом же кадре написать:
embed_bold_txt._visible = false;
embed_italic_txt._visible = false;
embed_bolditalic_txt._visible = false;
embed_txt._visible = false;
format = embed_txt.getTextFormat();
таким образом ты получишь формат текстового поля, содержащего шрифт, который подгружен в ролик. (компилятор может не включить шрифт в ролик, если в текстовом поле нет хотя бы одного символа... так что может понадобиться там что-нить написать.)
далее, ты создаешь текстовое поле скриптом:
this.createTextField("TF",0,0,0,100,0);
TF.autoSize = true;
TF.html = true;
TF.setNewTextFormat(format);
таким образом у тебя текстовому полю будет назначен шрифт, который ты подключил.
Черт, пришлось разбить на 2 файла... :(
Извините - не влезло в один.
Основной код находится внутри MC
'Text animation'
Функцию создания текста взял из приведенной мной ранее ссылки, слегка модифицировал.
Вообще весь баннер - не мой, поэтому возможно, там кое-что лишнее.
Мне лишь надо сделать в нем динамический текст (желательно).
Выглядеть оно должно примерно так, как в растеризованных надписях (я их установил в тип 'Guide', чтобы не мешали - в клипе phraseMC. Правда, существует еще и проблема аутлайна... Но это - ладно, что-нибудь придумаю)
Nox Noctis
спасибо за ответ - после обеда прочитаю внимательнее. Но многое из тобой сказанного я использую в своем коде. Однако что-то где-то не так... :-\
Такое впечатление, что autoSize у меня не срабатывает...
Кстати, я пробовал и прежде делать поле заранее - чтобы все эти свойства не задавать в коде, но всё - да что-то не то получалось.
Кстати, ты говоришь autoSize установить в true.
А в доке написано, что оно принимает 3 значения: left, right или center...
Неважно - я пробовал и так, и сяк, но у меня всегда текст липнет к левому краю.
И еще: почему ты говоришь помещать в первый кадр, а не в onLoad клипа?
------------
Что ж... Придется все модификации (масштабирование, прозрачность) выносить в сам клип... Делать его из нескольких (десятков - в моем случае кол-во известно) кадров. А в первый выносить всю инициализацию - создание текстового поля и т.п. И проигрывать его один раз. Иначе никак :(
Ради Бога - помогите кто-то работающим примером!
С масштабированием текстового поля во времени. А то я сойду с ума :eek:
Когда я делаю с "готовым" полем, которое затем позиционирую - оно появляется почему-то в странном виде: первая строка мелким шрифтом, вторая - очень крупным... И выравнивание по центру просто игнорируется.
Если же создаю поле динамически, в первом кадре мувика - оно вообще не отображается в этом и последующих кадрах: непонятно, почему...
Тебе всё написали разбирайся
Ну хорошо, хорошо...
А насчет stroke... Мне нужно бы к тексту применить обводку. Похоже, что никак ничего не придумаешь?
Странно, что до 8-й версии возможности работы с текстовым объектом такие ограниченные... При том, что в векторных редакторах (да и растровых тоже) назначать outline было можно с незапамятных времен...
Да и здесь ты тоже можешь также как векторных редакторах, всё что тебе нужно ето выделить текст и нажать пару раз Ctrl+B а потом воспользоватся инструментом для обводки .... вот и все дела
Я же имел в виду возможность применения stroke не к shape-у, а именно к объекту "Текст", который я ранее создал с помощью TextField ;)
тогда юзай восьмёрку ... ты просто сравнил с векторными редакторами я тебе и привёл такой же пример для флеша
тогда юзай восьмёрку ... ты просто сравнил с векторными редакторами я тебе и привёл такой же пример для флеша
Я провел ту аналогию, что в векторных редакторах можно к объекту "Текст", не переводя его в кривые, применить Outline. Применить Stroke к объекту "Текст" во Flash (по крайней мере, до 8-й версии, если я верно понял) - нельзя...
Nox Noctis
16.12.2005, 12:43
ты не поверишь, но тут пока никто не понял, ЧТО у тебя не работает.
Такое впечатление, что autoSize у меня не срабатывает...а у всех остальных сработатывает.
покажи свой пример, что ты и как делаешь?
autoSize = true это то же самое что autoSize = "left"
почему ты говоришь помещать в первый кадр, а не в onLoad клипа?
ээ... что? :) помести куда сочтешь нужным, я просто описал порядок действий.
из первого сообщения:
поскольку вертикальное выравнивание" отсутствует...по-моему оно нормально так присутствует. :) объяснить что для тебя "вертикальное выравнивание", и покажи наконец как это оно у тебя не работает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.