флэш-производительность в Internet Explorer - PullRequest
0 голосов
/ 11 ноября 2009

Я разместил это на форумах Adobe, но не ожидаю хорошего ответа там. Я ищу помощи от кого-то, кто сделал игру во флэш-памяти и столкнулся с той же проблемой.

Действия по воспроизведению моей проблемы:

  1. Создание простого точечного объекта DisplayObject во флэш-памяти

    dot.graphics.beginFill( color);
    dot.graphics.drawCircle( 0, 0, 2 );
    dot.graphics.endFill();
    
  2. Нарисуйте точку на растровом изображении много раз в кадре

    bitmapData.draw( dot, null, null, "normal", null, _smoothing );
    
  3. Тест FrameRate в комбинации браузеров, версий flash-плагинов на Win32

Ожидать:

Частота кадров должна быть близка в большинстве случаев

Наблюдаемые:

Я вижу снижение частоты кадров на 25% в IE7 при использовании Flash10b.ocx (10.0.22) и снижение частоты кадров на 50% при использовании Flash10c.ocx (10.0.32). PLugins под FireFox, Safari и в Mac OSX не демонстрируют такого же замедления.

Помогите пожалуйста:

Я хотел бы получить справку / подтверждение о проблеме с производительностью, которую я вижу в Internet Explorer. Сообщество Adobe и Flash отлично работает в Интернете, но я был удивлен, когда не получил никакой информации об этом, лишь несколько отчетов о воспроизведении фильмов на 10.0.32 против 10.0.22.

Я предполагаю, что в плагине IE flash передает вызовы отрисовки в Win32, и это медленно.

Мое решение:

Вместо того, чтобы каждый раз рисовать на растровом изображении с помощью draw, кэшируйте вызовы отрисовки на растровом изображении и используйте CopyPixels. Когда я делаю это, производительность одинакова для всех браузеров, в пределах 10%.

bitmapData.copyPixels(dot.bitmapData,dot.bitmapData.rect,new Point(dot.x,dot.y),null,null,true);

Петля, которую я использую:

function enterFrame(e:Event) {
    bitmap.lock();

    for (var i:int=0;i<particles.length;i++) {
        draw(particle[i]);
    }

    bitmap.unlock();
}

Примечания о других, возможно, "известных" проблемах, о которых я хотел бы узнать больше:

  • Согласно IE, использование памяти для моего приложения намного меньше (33 МБ во Flashplayer, 16 МБ под IE).
  • В IE ошибки страницы памяти превышают 10 к / с, тогда как в флеш-плеере их нет.
  • В IE с помощью stage.invalidate возникают проблемы с производительностью.
  • Под IE установка фильтра размытия на растровое изображение приводит к большей производительности, чем во флэш-плеере.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2009

Спасибо за подтверждение. Я думал, что цель блокировки - помочь вспышке минимизировать перерисовки. Я вижу заикание, хотя приложение flash работает со скоростью около 60 кадров в секунду.

Вместо того, чтобы интересоваться, правильно ли я все кодировал. Я изменил некоторый новый пример кода производительности tweenlite для линейного движения около 150 пикселей / сек. Это подчеркивает заикание, которое люди видят. Пример: http://forums.greensock.com/viewtopic.php?f=1&t=1857.

0 голосов
/ 12 ноября 2009

Производительность Flash-плагина (дико) различна для каждой платформы / браузера / минорной версии / отладчика / и т. Д. Мало что можно сделать, чтобы компенсировать эти различия, кроме кодирования наименее общего знаменателя вашей целевой аудитории.

Тем не менее, bitmapData.draw медленный, так как он вызывает повторную растеризацию векторных данных при каждом вызове. Под капотом Flash также использует этот метод, но отслеживает грязные области экрана, поэтому он вызывает его меньше, чем вы (включите «показывать области перерисовки» в отладчике, чтобы увидеть это визуально).

Ваше решение bitmapData.copyPixels является правильным для ручных реализаций растра. Это практически единственный механизм для получения высокопроизводительной сложной анимации во Flash.

...