![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2014
Сообщений: 6
|
В миоей флешке каждый новый кадр рисуются различные неправильные многоугольники с разными размерами, координатами, колличеством углов и т.д. в векторной графике. В начале следующего кадра все вышеописанные объекты стираются и рисуются новые многоугольники, не похожие на предыдущие, причем количество этих объектов непостоянно. При большом количестве фигур флешка начинает сильно тормозить. Как же повысить производительность флешки?
Видел способ, решающий проблему производительности для правильных фигур, которые не перерисовываются каждый кадр, но при применении этой технологии к моей программе - лагает еще сильнее... |
|
|||||
|
Скорее всего вам нужно делать растровый снимок, всех фигур. Как-то так:
package { import AS3.FPS; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; /** * ... * @author samana */ public class Main extends Sprite { // растровая картинка с размерами вашей флешки private var _bmd:BitmapData = new BitmapData(600, 400, true, 0x00000000); // то, что отображает картинку, кладётся на сцену private var _bm:Bitmap = new Bitmap(_bmd); public function Main() { //положили картинку на сцену addChild(_bm); addEventListener(Event.ENTER_FRAME, enterFrame); } private function enterFrame(e:Event):void { // отчищаем картинку, заполняем её прозрачным цветом _bmd.fillRect(_bmd.rect, 0x00000000); // создаём временный контейнер, куда будем класть/рисовать фигуры var holder:Sprite = new Sprite(); // здесь какая-то ваша реализация рисования фигур for (var i:int = 0; i < 200; i++) { // если фигура это отдельный объект, то помещаете его во временный контейнер var figure:Figure = new Figure(); figure.x = Math.random() * 600; figure.y = Math.random() * 400; holder.addChild(figure); //либо рисуете фигуры прямо во временном контейнере //holder.graphics.drawRect и т.д. } //после того как все фигуры созданы, то делаем растровый снимок контейнера _bmd.draw(holder); } } } |
|
|||||
|
Регистрация: Aug 2014
Сообщений: 6
|
Спасибо вам за этот код. На компьютере сразу заметен прирост производительности, но на мобильных устройствах всё словно осталось прежним(а может даже и хуже). Что раньше я отрисовывал векторные фигуры, что сейчас делал растровый снимок всех фигур - на телефоне, вроде, ничего в производительности не поменялось. От чего это? Можно как-нибудь и не телефоне повысить производительность?
|
|
|||||
|
На компе ты бы мог попробовать и метод cacheAsBitmap, на мобилах такое врядли поможет. Нужно использовать гпу.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
MrFOX, для телефонов растр - слишком сложная задача. Адекватной производительности можно добиться только отрисовкой через gpu.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 03:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|