Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Обращение к свойствам Bitmap (http://www.flasher.ru/forum/showthread.php?t=108395)

Torero 21.02.2008 06:03

Обращение к свойствам Bitmap
 
Доброго времени суток.
Возникла проблемка небольшая: Подскажите пожалуйста, почему я не могу добраться до свойств объекта Bitmap(), обращаясь к нему через getChildAt?
Код:

        var bm:Bitmap=new Bitmap(new BitmapData(100,100,false,0x00FF00));
        bm.x=100;
        addChild(bm);
        bm.smoothing=true;
        //getChildAt(0).smoothing=true;  //вываливается в ошибку

P.S.Сразу приношу извинения за код в кадре - вопрос, похоже, примитивный.
P.P.S. Модераторам: переименуйте пожалуйста топик в "Обращение к свойствам Bitmap()" - я плохо название сформулировал.

MerlinTwi 21.02.2008 10:24

Код:

(getChildAt(0) as Bitmap).smoothing=true;

Pecher 21.02.2008 10:26

Компилер не знает, что childAt(0) - это Bitmap.
Код:

Bitmap(getChildAt(0)).smoothing = true;

etc 21.02.2008 10:43

Pecher, для кастинга есть оператор as.

Torero 21.02.2008 16:01

Большое спасибо. С вашего позволения еще 1 вопрос на тему битмапов:

A BitmapData object can be drawn to the screen by a Bitmap object in one of two ways: by using the vector renderer as a fill-bitmap shape, or by using a faster pixel-copying routine. The pixel-copying routine is substantially faster than the vector renderer, but the Bitmap object must meet certain conditions to use it:

-No stretching, rotation, or skewing can be applied to the Bitmap object.
-..
-..

- это кусок из хелпа. Подскажите пожалуйста как его понимать в следующей ситуации:

1.есть объект BitmapData() в котором отрисован прямоугольник
2.есть 10-100 объектов Bitmap(), ссылающихся на вышеупомянутый BitmapData()
3.У некоторых из объектов Bitmap() изменены .scaleX и .rotation, к некоторым применен colorTransform - для них что, рендерер создает свои BitmapData()??
P.S.В реале, в BitmapData отрисован не прямоугольник, а нечто, состоящее из 20-25 шейпов, поэтому и использую BitmapData+много Bitmap, а не отрисовываю вектор.

silin 21.02.2008 16:30

непонятно что смущает : все битмапы несут ссылку на один и тот же битмапДата, но отрисовывают его уже как кому надо..

Torero 21.02.2008 17:11

Смущает непонимание того каким образом Bitmap(), основывающийся на BitmapData() отрисовывается посредством !!vector!! renderer-а. Это тупизм какой-то. Как такое вообще возможно? Ведь, по-идее, BitmapData() и vector-renderer вещи несовместимые.

etc 21.02.2008 17:15

Цитата:

Сообщение от Torero
Ведь, по-идее, BitmapData() и vector-renderer вещи несовместимые.

Bitmap не является наследником BitmapData.

LinuxVideo 21.02.2008 17:30

Похожий вопрос: а как форсировать faster pixel-copying routine? Дабы всегда был только он?

silin 21.02.2008 17:38

имхо об этом и речь в приведенной тобой цитате: если битмап должен показать картинку без трансформаций, то можно по быстрому тупо скопировать все пиксели в экран, а если картинка повернута/погнута/пофильтрена, то по простому уже не проходит - нужны более ресурсоемкие алгоритмы..
не знаю точно, но думаю что vector renderer здесь условное понятие, во всяком случае не вижу смысла заморачиваться на этом

LinuxVideo 21.02.2008 20:11

> не вижу смысла заморачиваться на этом

Когда время рендеринга около 2200ms, то смысл есть. Тут еще 3D добавил, вообще плохо стало...


> а если картинка повернута/погнута/пофильтрена, то по простому уже не проходит - нужны более ресурсоемкие алгоритмы..

Оно у меня работает быстрее, чем copyPixels из битмапа в битмап... Я уже писал про это. Сам в шоке.

silin 21.02.2008 20:39

ээ..я, собственно, Torero отвечал по поводу что за vector renderer при отрисовке растра..
как принудить не знаю, подозреваю, что плеер это сам решает когда что можно.., да и как принудишь, если это в принципе нереально для искаженной картинки..
copyPixels (метод BitmapData) здесь вовсе не при чем: речь же о внутренних методах, которыми плеер (Bitmap в этом контексте) выводит картинку

MerlinTwi 22.02.2008 11:14

vector renderer подразумевается, что создается Shape, который заливается (beginBitmapFill) картинкой с применением матриц искажения.
ИМХО, т.к. что действительно делает рендер знают лишь в адобе.

Недавно натолкнулся на интересную фичу: если создать мувик, в него положить картинку из библиотеки и сделать трейс
Код:

trace(this.getChildAt(0));
то получаем:
[object Shape]
и только если эту картинку превратить в класс (Linkage: export for ActionScript), то будет уже
[object Bitmap]

etc 22.02.2008 13:18

Ну это как бы не фича, шейпы с заливкой едва ли не с пятой версии идут.

Torero 22.02.2008 16:33

Спасибо за ликбез.))

Ariel 17.04.2011 03:54

Вопрос, на самом деле, очень важный. Тут есть над чем поразмыслить...
Скажем, КАК определить, КАКИМ рендерером в данный момент выводится Битмапа? Просто соблюдать условия, перечисленные в хелпе, недостаточно для уверенного девелопмента. Я хочу знать НАВЕРНЯКА, КАК оно сейчас рисуется. Если, например, используются Float-координаты для передвижения картинки, а не Int, то, в соответствии с хелпом, должен включаться алгоритм векторного рендерера... Как узнать наверняка? Не нужны нам ситуации, когда две ОДИНАКОВЫЕ Битмапы, построенные на ОДИНАКОВЫХ БитмапДатах будут рисоваться разными рендерерами только потому, что одну из них повернули на 1 градус....
Тут конечно очень ценен опыт тов. Etc-a, который, оптимизируя Destiny, наверняка кучу собак съел с этими рендерерами и копипикселями.

alatar 17.04.2011 11:51

Ariel, даже если вы узнаете наверняка, этот "верняк" будет работать для конкретной версии плеера. Рендерер сейчас активно меняется. Хотите контролируемости — используйте bitmap blitting. В определенных ситуациях и при правильном подходе это дает весьма ощутимый прирост в производительности.

Ariel 17.04.2011 20:40

блиттинг годится тильки если рендерить все время надо б0льшую часть стэйджа. Если объектов не море, то он откровенно вреден, так как всегда перерисовывает всю сцену. А если у нас полнобраузерное\полноэкранное приложение? Хотя, Вы говорите, при правильном подходе ...

Пускай "верняк" работает в конкретной версии, но я хочу это реально видеть. А то гадать, откуда тормоза взялись ИМХО не правильно.

alatar 18.04.2011 00:18

Цитата:

блиттинг годится тильки если рендерить все время надо б0льшую часть стэйджа.
Почему вы так решили?

Ariel 18.04.2011 02:21

Отличная ссылка, спасибо! Автор, как и я, юзал полностейджевый блиттинг. Пока не повстречал старую гвардию! Круто, всегда есть куда продвигаться! Опять-таки, есть над чем поразмыслить.
Он даже перевел статью от 8битРокета про Арканоид!
Гражданину Алатару - гранд мерси!

fish_r 18.04.2011 02:46

alatar твоя страничка что ль?

alatar 18.04.2011 04:27

Нет, не моя.


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

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