Форум 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=130788)

Рен 05.10.2009 19:57

Ручное кэширвание (растеризация)
 
Мне необходимо заменить векторный муви клип на растеризованный растровый, т.е.
закэшиовать объект для анимации.
Свойство cacheAsBitmap не подходит, т.к. при вращении клипа подложка постоянно
пересоздается, что еще больше ухудшает ситуацию с производительностью.

функция растеризации:

Код:

                private function rasterizeMovieClip(obj:MovieClip)
                {
                        //берем родителя у векторного муви клипа
                        var _parent = obj.parent;
                        //идекс глубины векторного муви клипа
                        var level:int = _parent.getChildIndex(obj);
                        //создаем пустой муви клип
                        var bd_mc:MovieClip = new MovieClip();
                        //создаем пустую картинку
                        var bd:BitmapData = new BitmapData(obj.width,obj.height,true,0x00000000);           
                        //вроде, как заполняем картинку исходя из векторной картинки?
                        bd.draw(obj);
                        //добавляем растровую картинку в наш новый муви клип,
                        //но у меня выводится ошибка: "Параметр child не должен быть равен нулю"?
                        bd_mc.addChildAt( (bd as DisplayObject),0);
                        //берем положение из векторного муви клипа
                        bd_mc.x = obj.x;
                        bd_mc.y = obj.y;
                       
                        //удаляем векторный муви клип из родителя
                        _parent.removeChildAt(obj,level);
                        //удаляем из памяти. Сборщик мусора удалит этот клип из памяти со всей графикой?
                        obj = null;
                       
                        //добавляем родителю наш новый растровый муви клип с нужным индексм векторного муви клипа
                        _parent.addChildAt(bd_mc, level);
                }

1.Почему у меня выдается ошибка при добавлении картинки в муви клип?:
Код:

bd_mc.addChildAt( (bd as DisplayObject),0);
2.//удаляем из памяти. Сборщик мусора удалит этот клип из памяти со всей графикой?
Код:

obj = null;

FlashRabbit 05.10.2009 20:06

1. Bitmap и BitmapData разные вещи.
2. Да.
Вот как надо:
Код AS3:

private function getBitmapFromObject(val:DisplayObject):Bitmap
{                       
        var bmp:Bitmap
        var bmpData:BitmapData = new BitmapData(val.width, val.height,true, 0x00000000);       
        bmpData.draw(val);               
        bmp = new Bitmap(bmpData);                       
 
        return bmp;                               
}


Рен 05.10.2009 21:36

Спасибо помогло, но есть момент. У меня в векторном клипе находится колесо от машины и центр его это координаты 0,0, чтобы оно крутилось вкруг своей оси. Но, когда я вызываю bd.draw(obj);, то копируется лишь 1/4 часть колеса в bmpData, т.е. та часть координаты которой лежат за 0,0.
Как мне лучше всего плностью скпирвать в bmpData колесо при таких координатах колеса в векторном муви клипе?

etc 05.10.2009 21:40

Matrix.

Рен 05.10.2009 22:55

Matrix. - помогло.
Еще возник вопрос, теперь у меня есть клип с растровым колесом, отлично визуально выглядит, но теперь нужно у растрового клипа сделать центральную точку вращения, чтобы колесо могло вращаться как положено. Т.е. как задается программно точка вращения у клипа?

etc 05.10.2009 22:59

Либо через transform, либо просто в контейнер типа Sprite положить битмап со смещенными координатами и вращать потом спрайт.


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

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