Update: Растеризация MovieClip в последовательность BitmapData

Пост для тех, кто использует метод, описанный мной в Растеризация MovieClip в последовательность BitmapData — я его обновил.
Советую заглянуть туда и обновить код у себя в играх, ибо будет вам ускорение.

Суть в следующем: getColorBoundsRect оказался излишне медленным, когда он работает на большой битмапе (спасибо Эду Рыжову, который это заметил). То-есть, когда черновая битмапа становится, скажем 1024 на 1024, из-за какой-то большой картинки, а последующие картинки рендерятся маленькие, то сильно теряется время. Но без getColorBoundsRect обойтись нельзя, если вы используете маски. Я попробовал просто каждый раз пересоздавать черновую битмапу и оказалось, что выделение памяти настолько быстро, что общее время теперь не сильно отличается от времени без использования getColorBoundsRect вообще. На моем текущем проекте старый вариант занимал 2400ms, новый 700ms, без использования черновой битмапы и getColorBoundsRect 685ms. Обновил код и инструкцию.

Определение размера клипа с учетом эффектов

Поскольку тренд физических паззлов я пропустил мимо ушей, попытаюсь попасть хотя бы в тренд кэширования мувиклипов в растр. ;)

Хочу поделиться приемом, который позволяет достоверно узнать габариты клипа с учетом примененных фильтров (только симметричных типа glow и blur, возможное смещение в shadow не учитывается). Моя реализация рассчитана на AS 2, но, для третьего, я думаю, она тоже подойдет, тут главный прикол в принципе, а он прост:
Читать дальше →

Растеризация MovieClip в последовательность BitmapData

Есть известный прием для оптимизации скорости отрисовки векторной анимации на экране, а именно: перегонка мувиклипа в последовательность битмапдат.
Последние дни обнаружилось, что реализация этого приема вызывает некоторые одинаковые трудности даже не у одного камрада. В частности появляется дрожание. Поэтому, после первого обращения я решил позже выложить свою реализацию. А после второго решил, что плохо медлить :)

UPD: Расширил черновую битмапу, чтобы учесть возможные заступы из-за фильтров.
UPD 2: getColorBoundsRect оказался излишне медленным, когда он работает на большой битмапе (спасибо Эду Рыжову, который это заметил). То-есть, когда черновая битмапа становится, скажем 1024 на 1024, из-за большой картинки, а последующие картинки рендерятся маленькие, то сильно теряется время. Но без getColorBoundsRect обойтись нельзя, если вы используете маски. Я попробовал каждый раз пересоздавать черновую битмапу и оказалось, что выделение памяти настолько быстро, что общее время теперь не сильно отличается от времени без использования getColorBoundsRect вообще. На моем текущем проекте старый вариант занимал 2400ms, новый 700ms, без использования черновой битмапы и getColorBoundsRect 685ms. Обновил код и инструкцию.

Читать дальше →

Кеширование MovieClip

Когда я заметил, что мои игры сильно тормозят с релизной графикой я решил её как-то оптимизировать. Стандартный cacheAsBitmap не помог. Порывшись на форумах и гуглах я выяснил, что лучше самому кешировать клипы в Bitmap. Даже нашёл исходники кеширования от TouchMyPixel, разработчиков игры Scary Girl. Но он был слишком не универсальным, заставлял художника сделить за размером кадров. Поэтому взяв его за основу я написал свой класс, который превращает любой MovieClip в набор Bitmap'ов с учётом всех смещений. В дальнейшем этот класс можно будет использовать для создания атласов анимации, которые можно будет использовать при портировании Flash игр на другие платформы.
Читать дальше →

Как сделать полный stop() мувиклипу

Однажды столкнулся я с проблемой — нужно остановить мувиклип перед тем, как положить его обратно в пул. Чтобы гад не крутился там в небытии и не жрал ресурсы. Однако метод stop() останавливает только таймлайн самого мувиклипа, а все мувиклипы-дети, которые на нем крутятся — продолжают крутиться. Например, если у вас есть клип «танк», в котором есть анимация кручения гусеницами, но дополнительно в нем есть клип «человечек в люке», который машет флажком. То после метода stop() на танке гусеницы остановятся. А человечек все машет и машет, машет и машет. Танк может уже удалили, но пока его не зачистил гарбадж коллектор — он машет и машет, проц напрягается и напрягается. А если у вас реализован пул танков, то сотни танков в пуле и на каждом человечек машет и машет флажком… Ужос!

Читать дальше →