Передача объекта BitmapData из SWF AS2 в SWF родительского AS3 через SWFBridge - PullRequest
0 голосов
/ 05 января 2011

Мне нужно перенести объект BitmapData, созданный в SWF AS2, в SWF AS3. Я использую SWFBridge от gskinner для установления двусторонней связи между обоими флэш-фильмами.

Фильм AS3 загружает swf AS2, который работает полностью автономно и позволяет пользователю манипулировать мувиклипами и, наконец, генерировать изображение из создаваемой им композиции. Мне нужен фильм AS3, чтобы получить это изображение (bitmapData), сделать какие-то необычные вещи, которые AS2 не может сделать, и отправить новое изображение обратно в фильм AS2.

Так вот код

AS2 swf:

var userCompo_mc:MovieClip = container.createEmptyMovieClip("userCompo_mc",10);
var image:BitmapData = new BitmapData(userCompo_mc._width, userCompo_mc._height);
finalCompo.attachBitmap(image); // Just to make sure the final bitmap is right
image.draw(userCompo_mc, compo.title);

//Send the image to the AS3 movie
sb1.send("imageTransfer",image);

AS3 swf:

function imageTransfer(bitmapData:BitmapData, title:String):void
{
    var bmp:Bitmap = new Bitmap(bitmapData);
    this.addChild(bmp);
    trace(title); // --> returns the right title
    trace(bitmapData); // --> returns null
}

Я думаю, что используя что-то вроде copyPixel32 (), сохраняя все в массив, а затем передавая его в AS3, можно добиться цели, но это действительно снижение производительности.

Кроме того, я не могу конвертировать ASF SWF в код AS3.

Есть предложения?

Спасибо тебе!

1 Ответ

0 голосов
/ 06 января 2011

Кажется, что фильм as2 добавляет некоторые украшения / мувиклипы к изображению.После этого вы рисуете и отправляете попытку отправить его в as3.

Поскольку зацикливание, хотя все пиксели медленные, как вы упоминаете, я полагаю, быстрее извлечь содержимое as2 из фильма as3.

Например,

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaded);
loader.load(new URLRequest('yourAS2Movie.swf'),new LoaderContext(true));

function loaded(event:Event):void{
    var as2Clip:AVM1Movie = AVM1Movie(loader.content);
    var bd:BitmapData = new BitmapData(as2Clip.width,as2Clip.height,false,0);
    bd.draw(as2Clip);
    addChild(new Bitmap(bd));
}

Inэтот фрагмент содержимого as2 рисуется при загрузке.В вашем случае вы бы вызвали / вызвали функцию, которая рисует контент as2 через SWFBridge, после того как фильм as2 будет готов / настроен на то, что вам нужно.

Это работает, если вы хотите отобразить контент as2 внутри as3фильм, что означает, что вы все равно загрузите фильм as2.Если нет, либо вы загружаете контент as2, но не добавляете его в список отображения, что означает, что вы будете загружать фильм as2.В противном случае вы можете попытаться сохранить окончательное растровое изображение из фильма as2, используя язык на стороне сервера (например, php), а затем запустить функцию в ролике as3 через SWFBridge, которая загрузит ранее сохраненное изображение.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...