16.06.2009

Flash Render Performance

По опыту портирования Duckstazy, где я так же рисовал всё "вручную", я могу сказать: используйте draw и copyPixels только для post-processing эффектов :))) Потому что, как оказывается, flash 9 и flash 10 сами очень хорошо справляются с отрисовкой своих display объектов. Он автоматически вычисляет какие участки нужно перерисовывать, генерирует mipmap уровни для bitmapdata. Правда есть одна неудобная вещь. Если вы хотите чтобы у вашей картинки всегда считались subpixels, то по документации вы сразу думаете поставить PixelSnapping.NEVER в создание bitmap объекта... но если скейл 1 и rotation 0, то всё равно привязка пикселей работает. Чтобы это исправить можно поставить скейл в 0.99, это заставит flash считать subpixels и всё будет ГЛАДЕНЬКО :) Так что, ребята, не используйте отрисовку вручную там, где это flash сделает за вас очень быстро.

Ещё одна неприятность, с которой я столкнулся уже в suitcase project - это резкое снижение fps, если начинаешь быстро двигать курсором в области flash приложения. Понятно из-за чего. Непонятно почему, если это не interactive объекты. Исправляется просто, установкой mouseEnabled и mouseChildren вашего top display контейнера в false.

Помните, что непрозрачные битмапы рисуются на ПОРЯДОК быстрее. 2^n х 2^m картинки рисуются так же быстрее. Клиппинг начинает работать если устанавливать в контейнер-прослойку scrollRect области клиппинга. Хороший прирост скорости для top контейнера можно обеспечить установив scrollRect, opaqueBackground и cacheAsBitmap (что у меня вначале никак не укладывалось в голове).

На сегодняшний день этого не хватает, чтобы создавать хотя бы в 640*480 хорошие атмосферные игры, но нужно пытаться выжать максимум. Кстати, можно делать old-school графику, которая будет очень быстро рисоваться, т.к. софтварный smoothing очень жрёт производительность.

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

  1. вот теперь я окончательно понял, что совершенно не умею программировать ))

    ОтветитьУдалить
  2. интересные мысли тебя посетили.. но тут совсем не о программировании. просто мысли о графической производительности flash платформы.

    ОтветитьУдалить
  3. 2^n x 2^m
    а означает знак "^" у вас? кратность? И если да - то кратность с прописанным скейлом в 0.99 или по номиналу изображения?

    ОтветитьУдалить
  4. Крышечка обозначает степень.
    Первоначальные размеры: свойства width и height в BitmapData.
    Кстати... Доброе утро ^-^

    ОтветитьУдалить