Я разместил это на форумах Adobe, но не ожидаю хорошего ответа там. Я ищу помощи от кого-то, кто сделал игру во флэш-памяти и столкнулся с той же проблемой.
Действия по воспроизведению моей проблемы:
Создание простого точечного объекта DisplayObject во флэш-памяти
dot.graphics.beginFill( color);
dot.graphics.drawCircle( 0, 0, 2 );
dot.graphics.endFill();
Нарисуйте точку на растровом изображении много раз в кадре
bitmapData.draw( dot, null, null, "normal", null, _smoothing );
- Тест 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 установка фильтра размытия на растровое изображение приводит к большей производительности, чем во флэш-плеере.