Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.01.2008, 16:26
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 1  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
По умолчанию [flash8] Нюанс по сглаживанию текста

Друзья, вопрос пожалуй прост, но ответа для себя найти не смог

Можно ли сделать, чтобы динамическое текстовое поле со внедренным шрифтом типа bitmap text вело себя при анимации также как статическое текстовое поле с этим же шрифтом? Т.е. в моменты нахождения поля в целочисленных координатах текст отображался без сглаживания, а когда поле в дробных координатах - срабатывало сглаживание.

Пример во вложении.
Вложения
Тип файла: rar bt.rar (33.7 Кб, 110 просмотров)

Старый 18.01.2008, 01:21
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 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
...
и далее
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
А в bt-hack.swf
Код:
0x84 10000100
Флаг FontFlagsSmallText отвечает за то, как будет вести себя вершины глифа в динамическом текстовом поле (в статичном поле вершины отображаются, как есть).
Если - 1, то вершины привязываются с размерам пикселя, что и давало - скачкообразное движение.
Если - 0, то так же, как и в статичном поле.

Поэтому, если надо добиться плавного движения, надо взять 3-ий байт перед именем шрифта, разложить его на биты и заменить третий бит на 0.
Вложения
Тип файла: zip BitmapText.zip (5.9 Кб, 127 просмотров)
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 18.01.2008 в 01:30.
Старый 18.01.2008, 10:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Замучаешься каждый раз при компиляции это ваять
Может быть проще использовать заточенный под флеш пиксельный шрифт и не париться?

Старый 18.01.2008, 16:29
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от __etc
Может быть проще использовать заточенный под флеш пиксельный шрифт и не париться?
Быстрее прочитать про короткий/длиный заголовок тега, научиться определять тип тега и его длину, и написать программу, которая ищет DefineFont2 или DefineFont3 и меняет в байте нужный бит.

Но еще быстрее, это взять ASV, открыть свою флешку и сформировать из файл ttf с готовым пикслеподобным шрифтом, который сделал флеш при компиляции swf (в примере Verdana_14pt_st). Установить его, и вместо связки Verdana + Bitmap text, выставить Verdana_14pt_st + Anti-alias for animation.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 18.01.2008, 16:35
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 5  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
iNils, __etc, спасибо!

Старый 19.01.2008, 03:33
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от iNils
Быстрее прочитать про короткий/длиный заголовок тега, научиться определять тип тега и его длину, и написать программу, которая ищет DefineFont2 или DefineFont3 и меняет в байте нужный бит.

Но еще быстрее, это взять ASV, открыть свою флешку и сформировать из файл ttf с готовым пикслеподобным шрифтом, который сделал флеш при компиляции swf (в примере Verdana_14pt_st). Установить его, и вместо связки Verdana + Bitmap text, выставить Verdana_14pt_st + Anti-alias for animation.
И все равно, использовать нормальный пиксельный шрифт гораздо проще и быстрее

Старый 19.01.2008, 03:40
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от __etc
И все равно, использовать нормальный пиксельный шрифт гораздо проще и быстрее
Если у тебя есть все нужные размеры.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 19.01.2008, 03:41
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Там обычно один размер используется. На то он и пиксельный.

Старый 19.01.2008, 03:44
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от __etc
Там обычно один размер используется. На то он и пиксельный.
У тебя есть шрифт с размеров 10, а теперь надо тебе с размеров 14. Где возьмешь? Или 15?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 19.01.2008, 14:26
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Пиксельные шрифты фиксированного размера. А то, что делает флеш в качестве пиксельного, врядли сойдет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.