我需要将在BitmapData swf中创建的AS2对象传输到AS3 swf。我正在使用gskinner的SWFBridge建立两个闪存电影之间的双向通信。
AS3电影加载完全独立工作的AS2 swf,让用户操纵MovieClips并最终从他创建的组合中生成图像。我需要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就可以了,但这确实是一种性能上的限制。
此外,我不允许将AS2 swf转换为AS3代码。
有什么建议吗?
谢谢你!
发布于 2011-01-06 01:59:08
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));
}在这个片段中,as2内容是在加载时绘制的。在您的例子中,您将触发/调用一个函数,该函数将在as2电影准备好/为您所需设置之后,通过SWFBridge绘制as2内容。
假设您想在as2电影中显示as3内容,这意味着您无论如何都要加载as2电影。如果不是,则加载as2内容,但不要将其添加到显示列表中,这意味着您将加载as2电影。否则,您可以尝试使用服务器端语言(例如php )从as2电影中保存最后的位图,然后通过SWFBridge在as3电影中触发一个函数,该函数将加载先前保存的图像。
HTH
https://stackoverflow.com/questions/4605856
复制相似问题