![]() |
[flash8] Нюанс по сглаживанию текста
Вложений: 1
Друзья, вопрос пожалуй прост, но ответа для себя найти не смог :umnik2:
Можно ли сделать, чтобы динамическое текстовое поле со внедренным шрифтом типа bitmap text вело себя при анимации также как статическое текстовое поле с этим же шрифтом? Т.е. в моменты нахождения поля в целочисленных координатах текст отображался без сглаживания, а когда поле в дробных координатах - срабатывало сглаживание. Пример во вложении. |
Вложений: 1
На самом деле вопрос не простой.
Легальным способом в IDE этого не добиться (лично я не знаю :D). Хотя возможно и есть варианты с всякими фокусами, типа BitmapData, но я расскажу про вариант с редактированием swf. В архиве два swf: bt-original.swf - обычное поведение. bt-hack.swf - поведение как у статичного поля. Как этого добиться? Для начала нужен hex-редактор или хотя бы вьювер. Я пользуюсь Far и плагином к нему "HEX редактор" SWF состоит из блоков тегов с данными, за шрифты отвечают три тега DefineFont, DefineFont2 и DefineFont3. DefineFont - для шрифта который используется только в статичных полях. Если этот же фонт используется и для динамического, то уже нужен тег DefineFont2, а для 8-ки DefineFont3 (у него более точное позиционирование вершин глифа), но оба имеют одинаковую структуру: Код:
RECORDHEADER HeaderА именно с FontName. Если взять любой из swf в аттаче, и посмотреть содержимое в hex виде, то легко можно найти запись "Verdana_14pt_st" (для этого надо отключить галочку Compress Movie в настройках публикации swf, а потом лучше сжать с помощью flasm), это и есть FontName. Перед ним идет байт FontNameLen определяющий число байтов отводимых под FontName. В нашем случаи там стоит 0x10 (то есть в 16 dec, хотя длина строки 15, просто число отводимых байт может быть больше, поэтому после "Verdana_14pt_st" стоит 0x00). Дальше, то есть впереди, байт LanguageCode 0x01. А вот впереди стоящий байт, то, что нам нужно. Каждый бит этого байт - флаг, что видно из таблицы выше. В bt-original.swf там Код:
0xA4 10100100Код:
0x84 10000100Если - 1, то вершины привязываются с размерам пикселя, что и давало - скачкообразное движение. Если - 0, то так же, как и в статичном поле. Поэтому, если надо добиться плавного движения, надо взять 3-ий байт перед именем шрифта, разложить его на биты и заменить третий бит на 0. |
Замучаешься каждый раз при компиляции это ваять :)
Может быть проще использовать заточенный под флеш пиксельный шрифт и не париться? |
Цитата:
Но еще быстрее, это взять ASV, открыть свою флешку и сформировать из файл ttf с готовым пикслеподобным шрифтом, который сделал флеш при компиляции swf (в примере Verdana_14pt_st). Установить его, и вместо связки Verdana + Bitmap text, выставить Verdana_14pt_st + Anti-alias for animation. |
iNils, __etc, спасибо!
|
Цитата:
|
Цитата:
|
Там обычно один размер используется. На то он и пиксельный.
|
Цитата:
|
Пиксельные шрифты фиксированного размера. А то, что делает флеш в качестве пиксельного, врядли сойдет.
|
Цитата:
|
Ну если есть желание извращаться — вперед, я не против :D
|
С пиксельным шрифтом была засада при полноэкранном режиме - начинал биться, хотя при задуманном размере выглядел хорошо.
PS Что-то я в Hex-редакторе (Hex-editor 3.12) ничего указанного iNils-ом не нашел :( Ни "define", ни "Verdana", ни т.п... |
| Часовой пояс GMT +4, время: 10:53. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.