Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему так сильно падает FPS? Где вся производительность? (http://www.flasher.ru/forum/showthread.php?t=211958)

caseyryan 15.12.2015 09:31

Сдается мне, что лагает эта система, скорее всего, от чего-то другого. Не во вращении 30 картинок дело.

ShockWave512 15.12.2015 13:28

Профайлер (скаут) мгновенно показывает такие вещи, без гаданий где затык.

zCHESNOKz 17.12.2015 17:13

Цитата:

Сообщение от ShockWave512 (Сообщение 1189687)
Профайлер (скаут) мгновенно показывает такие вещи, без гаданий где затык.

Да, я знаю спасибо. Он как раз таки показывает нагрузку на рендер.

undefined 17.12.2015 18:20

а какого размера битмапа?

zCHESNOKz 17.12.2015 19:54

Цитата:

Сообщение от undefined (Сообщение 1189737)
а какого размера битмапа?

примерно 100х100 px

Добавлено через 50 минут
Цитата:

Сообщение от caseyryan (Сообщение 1189683)
Сдается мне, что лагает эта система, скорее всего, от чего-то другого. Не во вращении 30 картинок дело.

Ты прав. Я вроде бы нашел проблему.
[frameRae:45] (все теже картинки 100х100)
- FPS при 50 объектах почти не проседает.
- при 100 объектах, 22-37 короче среднее FPS 30.
Мне подходит вообщем.

Как у меня это получилось: Я просто сделал анимацию (вращение+scale) в самом флеше. А самое главное, что анимация должна быть типа "Анимация движения" (при "Классической анимации движения" падает FPS)
+ если вы анимируете символ в котором есть маски (или возможно еще что то типа слоев, и других вложенных клипов) то для анимации обращайте данный клип в еще один клип, и производите трансформации уже с ним. Почему в клип, а не в Графику? Потому, что при обращении в графику тоже падает FPS. Даже не помогает преобразование в ключи.

Надеюсь что так работает не только у меня, а мое решение тоже еще кому то поможет! :)

--- --- ---

Еще я выявил, что FPS начинает падать, когда поверх или снизу данного клипа размещается еще какой то клип. То есть если они друг друга перекрывают. Это особенности рендера Flash?

caseyryan 18.12.2015 06:17

Вложений: 3
Это костыльное решение. Да и вообще не решение, по сути. FPS все равно падает. И не важно до какого значения.
Скорее всего графика там у тебя векторная. Или в самих картинках, или в масках. Но тут точно какая-то дезинформация.
Вот тут вообще 200 вращаются, и ни сколько FPS не проседает. Можно и 300 сделать, будет то же самое
RectsRotation.swf   (2.9 Кб)

Код AS3:

package {
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.geom.Point;
 
        [SWF(frameRate = 30)]
        public class ImagesRotation extends Sprite {
 
                private var _allObjects:Array = [];
 
                public function ImagesRotation() {
 
                        for (var i:int = 0; i < 200; i++) {
                                var b:Bitmap = new Bitmap(new BitmapData(100, 100, false, Math.random() * 100000000));
                                var s:Sprite = new Sprite();
                                var pos:Point = getRandomPosition();
                                b.x        = -b.width >> 1;
                                b.y        = -b.height >> 1;
                                s.x        = pos.x;
                                s.y        = pos.y;
                                s.addChild(b);
                                addChild(s);
                                _allObjects.push(s);
                        }
                        addChild(new Stats());
                        addEventListener(Event.ENTER_FRAME, onEnterFrame);
                }
 
                private function onEnterFrame(e:Event):void {
                        for each (var sprite:Sprite in _allObjects) {
                                sprite.rotation += 20;
                        }
                }
                private function getRandomPosition():Point {
                        return new Point(stage.stageWidth * Math.random(), stage.stageHeight * Math.random());
                }
        }
 
}


zCHESNOKz 18.12.2015 10:16

Вложений: 4
Это растр. Импортирую в библиотеку swc только растр. Из вектора - маска, для каждого изображения.

Изображение которое я вращаю - свечение. Потом в определенное время я включаю visible = true - красной зоны (изображение ). Оно как раз перекрывает свечение, ну или под ним. Не суть. И начинает падать FPS. Позже попробую показать флеху и код.
--- --- ---
Вот флешка и исходники.

Убрал векторные маски - ничего не изменилось, на FPS никак не повлияло. Дело просто в унылом рендере флеша. :(


Scketch.swf   (22.3 Кб)


код:

Код AS3:

public function Scketch()  
                {   
                        for (var i:int = 0; i < 75; i++)
                        {
                                addChild(box = new Box());
                                box_arr.push(box);
 
                                box.y = 175;
                                box.x = i * 9 + 50;   
                                //box.x = 100; 
                        }
 
                        stage.addEventListener(MouseEvent.CLICK, ClickL);
                }
 
                protected function ClickL(e:MouseEvent):void
                {
                        for (var i:int = 0; i < box_arr.length; i++)
                        box_arr[i].Bar();
                }
и
 
public function Box() 
                {
                        addChild(area = new fon_plant());
                        area.visible = false;
 
                        addChild(glow = new fon_b());
                }
 
                public function Bar():void
                {
                        swicher = false;
                        area.visible = false;
                }
 
                public function Foo():void 
                {
                        swicher = true;
                        area.visible = true;
                }


caseyryan 18.12.2015 11:50

Не надо гнать на флеш) я тебе привел код и файл, к котором двести картинок вращается. Запусти его у себя на компе. Если будет стабльно 30 фпс, значит дело в твоем коде. Если будет провисать, значит дело в компе. У меня и посерьезнее рендер бывал без провисаний, причем намного серьезнее
Цитата:

Из вектора - маска, для каждого изображения.
)) А говоришь растр. Векторная маска или просто векторная картинка. Для компа разницы нет. Одинаково сложно считается

п.с. Открыть исходник не могу. Нет у меня Flash CC

zCHESNOKz 18.12.2015 12:09

Цитата:

Сообщение от caseyryan (Сообщение 1189747)
Не надо гнать на флеш)

Я погорячился, прости Flash! :D Запустил, - твоя флеха не проседает. Комп в норме. Та и правда, глупо что я напоролся на такую маленькую проблему. Но за то очень весомую.

Как думаешь может посмотреть в сторону блиттинга, если проблема не решиться? Может поможет?

Bletraut 18.12.2015 20:19

Просмотрел исходник, причина лагов ясна - НЕ нужно оборачивать растровую картинку в мувик и делать над ней анимацию во флеше, это вся причина лагов. Как исправить:
1) Добавлять готовую растровую картинку сразу на сцену, НИ В КОЕМ случает НЕ НУЖНО оборачивать её ни в какие мувиклипы.
2) Анимацию вращения и увеличения создавать программно.

Итог: лагов не будет.


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

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