пятница, апреля 25, 2008

"Ручной" cacheAsBitmap. AS2

Для оптимизации быстродействия flash-приложения, мы часто прибегаем к кэшированию:

  • Устанавливается галка "Use runtime bitmap caching" - не очень удобный способ.
  • В as-коде клипа пишется cacheAsBitmap=true - удобно, но при кэшировании мы теряем сглаживание. То есть перемещаться наша картинка будет "рывками".

Для того, чтобы лучше контролировать наше кэширование, попробуем сделать его вручную. Для этого сделаем снимок нашего клипа, удалим всё его содержимое и вставим снимок обратно в клип.

Код можно посмотреть здесь: "Ручной" cacheAsBitmap. AS2.

Особенности:

  • Ограничения по размерам не более 2880х2880.
  • Все визуальные элементы должны быть клипами, иначе не всё удалится, что ухудшит производительность.
  • Несмотря на выставленные параметры в attachBitmap pixelSnapping="auto" и smoothing=true, каринка всё равно продолжает перемещаться рывками. Можно поменять pixelSnapping на "never" - не имеет значения. Однако, как только была добавлена строчка:
    this._height-=0.5;
    сразу включилось сглаживание и картинка поплыла плавно. Почему именно 0.5? Это минимальное искажение было установлено экспериментально для моей конкретной задачи. Для разных размеров может быть разное значение. Главное, чтобы произошло незначительное искажение хотя бы одного из размеров (горизонтального или вертикального).

Возможно есть более элегантное решение.

четверг, апреля 17, 2008

Изображения в текстовом поле. AS2

HTML-размета текстового поля, для Flash не менее 8-й версии, поддерживает динамическую загрузку изображений, путем указания тега <IMG>.

Поддерживаются следующие параметры тега:
src - URL изображения (JPEG, GIF, PNG, или SWF). Изображения не отображаются до тех пор, пока полностью не загрузятся.
id - имя клипа, который будет создан FP и в который загрузится изображение. Подробнее здесь.
width - ширина изображения в пикселах.
height - высота изображения в пикселах.
align - горизонтальное выравнивание изображения. возможны значения "left" и "right". По умолчанию - "left".
hspace - отступы от краев изображения по горизонтали. По умолчанию "8".
vspace - отступы от краев изображения по вертикали. По умолчанию "8".

Заметки:
  • Текст обтекает изображение по принципу, общепринятому в HTML-разметке.
  • Пока вертикальные размер и отступы изображения умещаются в расстояние от верха строчки до ее низа, нижняя строчка не смещается. (Например, при размере шрифта 11px и Line spacing 2pt, максимальный размер изображения по вертикали - 15)
  • Если перед тегом IMG есть текст (даже просто пробел), изображение вставляется в строку, расположенную ниже той, куда был вставлен тег.
  • Мы никогда не сможем поместить изображение в центр текстового блока.
  • Если указать только width или только height, с изображением ничего не произойдет.
  • Если встатвить подряд несколько абсолютно схожих тегов IMG, изображения выведутся в одну точку. Однако, стоит изменить один из параметров, как все последующие изображения выводятся ниже строкой.
  • Если задать подряд два тега IMG у которых параметры align установлены соответственно в "left" и "right", второе изображение всё равно будет строчкой ниже. А если второй тег поставить в конец строки - его изображение спустится уже на две строчки.
  • Еще одна ужасная особенность. Если свойство wordWrap = false, и тег IMG стоит первым, изображение просто не выводится.

Можно и дальше продолжить пытки TextField, и выявить новые фичи (читай баги). Но уже и так понятно, что нормальная вставка изображений в текст TextField (без хорошего бубна) невозможна.