Я разместил это на форумах Adobe, но не жду там хорошего ответа. Я ищу помощи у кого-то, кто сделал игру во флэш-памяти и столкнулся с той же проблемой.
Шаги по воспроизведению моей проблемы:
Создайте простой точечный DisplayObject во Flash
dot.graphics.beginFill( color); dot.graphics.drawCircle( 0, 0, 2 ); dot.graphics.endFill();
Отрисовывать точку в растровое изображение много раз за кадр
bitmapData.draw( dot, null, null, "normal", null, _smoothing );
- Тестирование FrameRate в сочетании с браузерами, версиями флеш-плагинов на Win32
Ожидать:
Частота кадров в большинстве случаев должна быть близкой
Наблюдаемый:
Я наблюдаю снижение частоты кадров в IE7 на 25% при использовании Flash10b.ocx (10.0.22) и на 50% при использовании Flash10c.ocx (10.0.32). Плагины под FireFox, Safari и Mac OSX не показывают такого же замедления.
Помоги пожалуйста:
Я хотел бы получить помощь / подтверждение о проблеме с производительностью, которую я вижу в Internet Explorer. Сообщество Adobe и Flash прекрасно работает в Интернете, но я был удивлен, когда не увидел никакой информации по этому поводу, а только несколько отчетов о воспроизведении фильмов в версиях 10.0.32 и 10.0.22.
Я предполагаю, что плагин IE flash передает вызовы отрисовки в Win32, и это медленно.
Мое решение:
Вместо того, чтобы рисовать каждый раз на растровом изображении с помощью отрисовки, кешируйте вызовы отрисовки в растровое изображение и используйте 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 ошибки страницы памяти превышают 10k / sec, тогда как во флеш-плеере их нет.
- В IE stage.invalidate, похоже, вызывает проблемы с производительностью.
- В IE установка фильтра размытия на растровое изображение имеет больший удар по производительности, чем во флэш-плеере.