Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   beginBitmapFill. Зависимость FPS от А: Размера BitmapData B: размера формы (http://www.flasher.ru/forum/showthread.php?t=136959)

gr_crd 01.03.2010 18:23

beginBitmapFill. Зависимость FPS от А: Размера BitmapData B: размера формы
 
Суть в следующем.
После многочисленных тестов, выяснился странный факт, что FPS при заливке области методом beginBitmapFill, никак не зависит ни от размеров заливаемой области, ни от размеров битмапы, использующейся для заливки.
Что это? Как-то нелогично получается...

Код AS3:

package {
 
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class bbf_test extends Sprite {
 
                var bm10:BitmapData = new x10(10,10);
                var bm100:BitmapData = new x100(100,100);
                var bm1000:BitmapData = new x1000(1000,1000);
 
                public function bbf_test():void {
 
                        addEventListener(Event.ENTER_FRAME, ont);
 
                }//cons
 
                function ont(e:Event):void {
                        graphics.clear();
 
                        for (var i:uint = 0; i < 50000;i++){
                        graphics.beginBitmapFill(bm10);
                        }
 
                        graphics.drawRect(0, 0, 100, 100);
                        graphics.endFill();
                }
 
        }//bbf_test
 
}//pack

где bm10 bm100 bm1000 - битмапы размерами соответственно 10х10 100х100 1000х1000

graphics.beginBitmapFill(bm10); - если вместо bm10 использую bm100 bm1000 - никакой разницы - все так же 9 FPS..

graphics.drawRect(0, 0, 100, 100); - пробовал изменять размер области от 10х10 на 1000х1000..... - ничего. Все те же 9 FPS....

Хотел сделать что-то похожее на MipMapping... но выходит, что результаты для любых размеров BitmapData - одинаковые.....

Как так может быть? В чем я заблуждаюсь??

GentleFLASH 03.03.2010 07:19

По-моему все логично. В данном примере вызывается 50000 раз вызов метода beginBitmapFill, на мой взгляд это равносильно, что сказать устройству - сейчас текстура такая-то. А фактическая отрисовка ее происходит только один раз graphics.drawRect(0, 0, 100, 100); Логичнее было бы 50000 раз вызвать как раз graphics.drawRect(0, 0, 100, 100); а beginBitmapFill(bm10) всего один.

Котяра 03.03.2010 10:14

отрисовка в graphics.endFill();
в цикл надо ставить всё рисование


Код AS3:

                        for (var i:uint = 0; i < 50000;i++){
                        graphics.clear();
                        graphics.beginBitmapFill(bm10);
                        graphics.drawRect(0, 0, 100, 100);
                        graphics.endFill();
 
                        }


gr_crd 03.03.2010 14:31

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

т.е. допустим есть 3000 треугольников.

каждый из них рисуется методами lineTo.
и заливается текстурой через beginBitmapFill.

beginBitmapFill(BitmapData, Matrix);

в таком случае вызывать graphics.clear() перед отрисовкой каждого треугольника...
для этого примера это подошло бы, но не для отрисовки треугольников так как 2999 предыдущих естесственно очистятся.

мне показалось нелогичным то, что при заливке этих 3000 треугольиков битмапой 10х10 пикс FPS остается таким же как и при заливке битмапой 1000х1000.

от чего зависит скорость метода beginBitmapFill ?

получается что неважен размер области и размер битмапы а только количество вызовов?

Котяра 04.03.2010 10:29

ну у вас количество вызовов ни на что не влияет.. просто 50000 раз меняется ссылка на битмапу.. какая разница какого она размера? отрисовка то происходит 1 раз.
beginBitmapFill - быстрый метод - это только присвоение ссылки - отрисовка идёт в endFill
Код AS3:

graphics.clear();
for (var i:uint = 0; i < 500;i++){
 
                        graphics.beginBitmapFill(bm10);
                        graphics.drawRect(i, i, i+100, i+100);
                        graphics.endFill();
 
                        }


gr_crd 04.03.2010 16:45

ааа, ну вообшем все прояснилось!)
пасибо!

Psycho Tiger 04.03.2010 19:39

Цитата:

отрисовка идёт в endFill
Разве? Я endFill бывает не пишу - но ничего, рисует.


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

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