![]() |
Обращение к свойствам Bitmap
Доброго времени суток.
Возникла проблемка небольшая: Подскажите пожалуйста, почему я не могу добраться до свойств объекта Bitmap(), обращаясь к нему через getChildAt? Код:
var bm:Bitmap=new Bitmap(new BitmapData(100,100,false,0x00FF00));P.P.S. Модераторам: переименуйте пожалуйста топик в "Обращение к свойствам Bitmap()" - я плохо название сформулировал. |
Код:
(getChildAt(0) as Bitmap).smoothing=true; |
Компилер не знает, что childAt(0) - это Bitmap.
Код:
Bitmap(getChildAt(0)).smoothing = true; |
Pecher, для кастинга есть оператор as.
|
Большое спасибо. С вашего позволения еще 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, а не отрисовываю вектор. |
непонятно что смущает : все битмапы несут ссылку на один и тот же битмапДата, но отрисовывают его уже как кому надо..
|
Смущает непонимание того каким образом Bitmap(), основывающийся на BitmapData() отрисовывается посредством !!vector!! renderer-а. Это тупизм какой-то. Как такое вообще возможно? Ведь, по-идее, BitmapData() и vector-renderer вещи несовместимые.
|
Цитата:
|
Похожий вопрос: а как форсировать faster pixel-copying routine? Дабы всегда был только он?
|
имхо об этом и речь в приведенной тобой цитате: если битмап должен показать картинку без трансформаций, то можно по быстрому тупо скопировать все пиксели в экран, а если картинка повернута/погнута/пофильтрена, то по простому уже не проходит - нужны более ресурсоемкие алгоритмы..
не знаю точно, но думаю что vector renderer здесь условное понятие, во всяком случае не вижу смысла заморачиваться на этом |
> не вижу смысла заморачиваться на этом
Когда время рендеринга около 2200ms, то смысл есть. Тут еще 3D добавил, вообще плохо стало... > а если картинка повернута/погнута/пофильтрена, то по простому уже не проходит - нужны более ресурсоемкие алгоритмы.. Оно у меня работает быстрее, чем copyPixels из битмапа в битмап... Я уже писал про это. Сам в шоке. |
ээ..я, собственно, Torero отвечал по поводу что за vector renderer при отрисовке растра..
как принудить не знаю, подозреваю, что плеер это сам решает когда что можно.., да и как принудишь, если это в принципе нереально для искаженной картинки.. copyPixels (метод BitmapData) здесь вовсе не при чем: речь же о внутренних методах, которыми плеер (Bitmap в этом контексте) выводит картинку |
vector renderer подразумевается, что создается Shape, который заливается (beginBitmapFill) картинкой с применением матриц искажения.
ИМХО, т.к. что действительно делает рендер знают лишь в адобе. Недавно натолкнулся на интересную фичу: если создать мувик, в него положить картинку из библиотеки и сделать трейс Код:
trace(this.getChildAt(0));[object Shape] и только если эту картинку превратить в класс (Linkage: export for ActionScript), то будет уже [object Bitmap] |
Ну это как бы не фича, шейпы с заливкой едва ли не с пятой версии идут.
|
Спасибо за ликбез.))
|
Вопрос, на самом деле, очень важный. Тут есть над чем поразмыслить...
Скажем, КАК определить, КАКИМ рендерером в данный момент выводится Битмапа? Просто соблюдать условия, перечисленные в хелпе, недостаточно для уверенного девелопмента. Я хочу знать НАВЕРНЯКА, КАК оно сейчас рисуется. Если, например, используются Float-координаты для передвижения картинки, а не Int, то, в соответствии с хелпом, должен включаться алгоритм векторного рендерера... Как узнать наверняка? Не нужны нам ситуации, когда две ОДИНАКОВЫЕ Битмапы, построенные на ОДИНАКОВЫХ БитмапДатах будут рисоваться разными рендерерами только потому, что одну из них повернули на 1 градус.... Тут конечно очень ценен опыт тов. Etc-a, который, оптимизируя Destiny, наверняка кучу собак съел с этими рендерерами и копипикселями. |
Ariel, даже если вы узнаете наверняка, этот "верняк" будет работать для конкретной версии плеера. Рендерер сейчас активно меняется. Хотите контролируемости — используйте bitmap blitting. В определенных ситуациях и при правильном подходе это дает весьма ощутимый прирост в производительности.
|
блиттинг годится тильки если рендерить все время надо б0льшую часть стэйджа. Если объектов не море, то он откровенно вреден, так как всегда перерисовывает всю сцену. А если у нас полнобраузерное\полноэкранное приложение? Хотя, Вы говорите, при правильном подходе ...
Пускай "верняк" работает в конкретной версии, но я хочу это реально видеть. А то гадать, откуда тормоза взялись ИМХО не правильно. |
Цитата:
|
Отличная ссылка, спасибо! Автор, как и я, юзал полностейджевый блиттинг. Пока не повстречал старую гвардию! Круто, всегда есть куда продвигаться! Опять-таки, есть над чем поразмыслить.
Он даже перевел статью от 8битРокета про Арканоид! Гражданину Алатару - гранд мерси! |
alatar твоя страничка что ль?
|
Нет, не моя.
|
| Часовой пояс GMT +4, время: 15:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.