Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Низкая производительность при большом количестве векторных фигур (http://www.flasher.ru/forum/showthread.php?t=211032)

MrFOX 13.06.2015 19:45

Низкая производительность при большом количестве векторных фигур
 
В миоей флешке каждый новый кадр рисуются различные неправильные многоугольники с разными размерами, координатами, колличеством углов и т.д. в векторной графике. В начале следующего кадра все вышеописанные объекты стираются и рисуются новые многоугольники, не похожие на предыдущие, причем количество этих объектов непостоянно. При большом количестве фигур флешка начинает сильно тормозить. Как же повысить производительность флешки?
Видел способ, решающий проблему производительности для правильных фигур, которые не перерисовываются каждый кадр, но при применении этой технологии к моей программе - лагает еще сильнее...

samana 13.06.2015 20:55

Скорее всего вам нужно делать растровый снимок, всех фигур. Как-то так:
Код AS3:

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);
 
                }
 
        }
 
}


MrFOX 14.06.2015 18:43

Спасибо вам за этот код. На компьютере сразу заметен прирост производительности, но на мобильных устройствах всё словно осталось прежним(а может даже и хуже). Что раньше я отрисовывал векторные фигуры, что сейчас делал растровый снимок всех фигур - на телефоне, вроде, ничего в производительности не поменялось. От чего это? Можно как-нибудь и не телефоне повысить производительность?

Bletraut 14.06.2015 18:57

На компе ты бы мог попробовать и метод cacheAsBitmap, на мобилах такое врядли поможет. Нужно использовать гпу.

AlexCooper 14.06.2015 20:27

Цитата:

Сообщение от MrFOX (Сообщение 1183586)
Можно как-нибудь и не телефоне повысить производительность?

да

illuzor 15.06.2015 00:28

MrFOX, для телефонов растр - слишком сложная задача. Адекватной производительности можно добиться только отрисовкой через gpu.


Часовой пояс GMT +4, время: 03:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.