![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2003
Сообщений: 290
|
Друзья, вопрос пожалуй прост, но ответа для себя найти не смог
![]() Можно ли сделать, чтобы динамическое текстовое поле со внедренным шрифтом типа bitmap text вело себя при анимации также как статическое текстовое поле с этим же шрифтом? Т.е. в моменты нахождения поля в целочисленных координатах текст отображался без сглаживания, а когда поле в дробных координатах - срабатывало сглаживание. Пример во вложении. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
На самом деле вопрос не простой.
Легальным способом в IDE этого не добиться (лично я не знаю ). Хотя возможно и есть варианты с всякими фокусами, типа BitmapData, но я расскажу про вариант с редактированием swf.В архиве два swf: bt-original.swf - обычное поведение. bt-hack.swf - поведение как у статичного поля. Как этого добиться? Для начала нужен hex-редактор или хотя бы вьювер. Я пользуюсь Far и плагином к нему "HEX редактор" SWF состоит из блоков тегов с данными, за шрифты отвечают три тега DefineFont, DefineFont2 и DefineFont3. DefineFont - для шрифта который используется только в статичных полях. Если этот же фонт используется и для динамического, то уже нужен тег DefineFont2, а для 8-ки DefineFont3 (у него более точное позиционирование вершин глифа), но оба имеют одинаковую структуру: RECORDHEADER Header UI16 FontID UB[1] FontFlagsHasLayout UB[1] FontFlagsShiftJIS UB[1] FontFlagsSmallText <-то что нам нужно UB[1] FontFlagsANSI UB[1] FontFlagsWideOffsets UB[1] FontFlagsWideCodes UB[1] FontFlagsItalic UB[1] FontFlagsBold UI8 LanguageCode UI8 FontNameLen UI8[FontNameLen] FontName ... и далее ![]() А именно с 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 там А в bt-hack.swf Флаг FontFlagsSmallText отвечает за то, как будет вести себя вершины глифа в динамическом текстовом поле (в статичном поле вершины отображаются, как есть). Если - 1, то вершины привязываются с размерам пикселя, что и давало - скачкообразное движение. Если - 0, то так же, как и в статичном поле. Поэтому, если надо добиться плавного движения, надо взять 3-ий байт перед именем шрифта, разложить его на биты и заменить третий бит на 0. Последний раз редактировалось iNils; 18.01.2008 в 01:30. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Замучаешься каждый раз при компиляции это ваять
![]() Может быть проще использовать заточенный под флеш пиксельный шрифт и не париться? |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Но еще быстрее, это взять ASV, открыть свою флешку и сформировать из файл ttf с готовым пикслеподобным шрифтом, который сделал флеш при компиляции swf (в примере Verdana_14pt_st). Установить его, и вместо связки Verdana + Bitmap text, выставить Verdana_14pt_st + Anti-alias for animation. |
|
|||||
|
Регистрация: Nov 2003
Сообщений: 290
|
iNils, __etc, спасибо!
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
![]() |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Там обычно один размер используется. На то он и пиксельный.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Пиксельные шрифты фиксированного размера. А то, что делает флеш в качестве пиксельного, врядли сойдет.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|