PDA

Просмотр полной версии : Секвенция bitmap'ов в мувиклип


gen4
04.09.2008, 18:54
ситуация в следующем:
Некий "навороченный" эффект, в целях увеличения быстродействия, рендриться в серию битмапов, что бы позже можно было без тормозов его проиграть.

Вопрос - как это реализовать?


Я пытаюсь сделать так:

private function renderFrame(frame){
videoSource.gotoAndStop(frame); //исходник
rendredVideo.gotoAndStop(frame); // новый пустой мувик куда я наивно пытаюсь складывать битмапы

var tmpBMD = new BitmapData(640,480);
tmpBMD.draw(videoSource);

tmpBMD.applyFilter(tmpBMD,tmpBMD.rect,new Point(0,0),new ColorMatrixFilter(mtx));
tmpBMD.applyFilter(tmpBMD,tmpBMD.rect,new Point(0,0),new BlurFilter(30,30));
tmpBMD.applyFilter(tmpBMD,tmpBMD.rect,new Point(0,0),_filter);


rendredVideo.addChild( new Bitmap(tmpBMD));
}


Но эта схема отказывается работать - в мувиклипе rendredVideo - 1 единственный кадр.

divinus
04.09.2008, 19:07
а не легче написать простенький класс для хранения кадров и их проигрывания?

gen4
04.09.2008, 19:22
а не легче написать простенький класс для хранения кадров и их проигрывания?
Т.е. хранить битмапдаты в массиве и отрисовывать на ENTER_FRAME?

_Smirnoff
04.09.2008, 19:28
Можешь реализовать свой генератор тактов...

divinus
04.09.2008, 20:16
Т.е. хранить битмапдаты в массиве и отрисовывать на ENTER_FRAME?
здесь вы как разработчик вольны избрать любой путь для реализации...

kackbip
04.09.2008, 21:13
Дело в том, что, насколько я знаю, gotoAndStop будет выполнен не сразу, а только при всплытии события ENTER_FRAME, т.е. после
videoSource.gotoAndStop(frame);
rendredVideo.gotoAndStop(frame);

вы должны сделать следующее
videoSource.addEventListener(Event.ENTER_FRAME, _onEnterFrame);

А также нужно определить метод-обработчик события _onEnterFrame:

private function _onEnterFrame(evt:Evnet):void{
var tmpBMD = new BitmapData(640,480);
tmpBMD.draw(videoSource);
tmpBMD.applyFilter(tmpBMD,tmpBMD.rect,new Point(0,0),new ColorMatrixFilter(mtx));
tmpBMD.applyFilter(tmpBMD,tmpBMD.rect,new Point(0,0),new BlurFilter(30,30));
tmpBMD.applyFilter(tmpBMD,tmpBMD.rect,new Point(0,0),_filter);

rendredVideo.addChild( new Bitmap(tmpBMD));
}


Должно быть так.