пятница, апреля 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? Это минимальное искажение было установлено экспериментально для моей конкретной задачи. Для разных размеров может быть разное значение. Главное, чтобы произошло незначительное искажение хотя бы одного из размеров (горизонтального или вертикального).

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

4 комментария:

vapes комментирует...

Как я знаю картинки перемещаются только по целочисленным координатам и ничего им не поможет. Хотя с 0,5 ты меня заинтриговал, надо будет попробовать. А лучше бы сам исходник выложил.

Unknown комментирует...

Нет, если ты, например, установил битмапу "Allow smoothing", он сглаживаясь будет ездить по дробным координатам. Правда в версиях до 8й это как-то всё плохо работало.

Unknown комментирует...

С исходниками - пока некуда. Вот скоро пересяду на свой хостинг, тогда выложу.

Анонимный комментирует...

Тоже провозился, с топиком – явный глюк.
Google молчит.
Выставил мувику _xscale=99.9, помоголо
дергаться перестало.