文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>将 MovieClip 转换为 BitmapData

将 MovieClip 转换为 BitmapData

时间:2010-10-19  来源:YiLi

 

之前的地图中的阻塞区域的生成是通过一个地图编辑器,需要人工去绘制地图上的网格,将地图上不可走区域所对应的网格绘制为红色,然后导出为XML文件,在程序中去读取XML文件进行解析。由于这个地图编辑器是以前的同事写的,性能实在不敢恭维,绘制工作十分繁琐,再加上大量的地图,所以项目主管给我添加了一个任务,就是将读取XML的方式换成读取像素,通过像素的方式去生成和XML方式一样的数据。

具体的思路其实就是由美工绘制一张黑白图,通过读取对应的像素判断是0XFFFFFF还是0X000000,由此生成1和0。

为了便于管理,还需要将这个阻塞图嵌入到地图的SWF文件中。

 

我上网找了一个关于从SWF中读取嵌入资源的方式,不过没什么收获。

图片资源在SWF中不能够动态的去得到,可以得到的只有类的实例,最基本的几个实例就是MovieClip,SimpleButton,TextField,所以我就想到是不是可以将图片放入一个实例中,然后去获取这个实例,所以SimpleButton和TextField可以排除,剩下MovieClip,我就新建一个元件,命名为Block,然后在里面放入图片资源,并在舞台上放一个实例,但是这个实例显然是不需要显示在舞台上的,只是需要使用一下就可以扔掉了,所以我想应该获得这个类,用的时候就实例化一个就行。

 

要从一个SWF中获得一个导出类,就需要知道一个域的概念,在FLASH中,每个SWF都有一个域,而当前的程序中的域,可以通过ApplicationDomain.currentDomain得到,要得到一个导出类就要从相应的SWF的域中去getDefinition,请看代码: 

private function beginLoad():void
{
    var loader:Loader = new Loader();
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
    var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
    loader.load(new URLRequest("map.swf"), loaderContext);
}

private function loadComplete(e:Event):void
{
    var cls:Class = ApplicationDomain.currentDomain.getDefinition("Block") as Class;
}

 以上是将加载的SWF的域作为当前域的子域,关于这方面的内容可到网上搜索。

参考:http://www.duzengqiang.com/blog/post/283.html

 

得到了导出类,接下来就解决由一个 MovieClip 得到BitmapData,到GOOGLE搜索一个"Convert a MovieClip to BitmapData",结果很快就来了,原来BitmapData有一个方法draw,可以将源数据的内容绘制到自身,间接就得到了像素的数据。通过BitmapData的方法getPixel得到相应位置的像素。

参考:http://www.actionscript.org/forums/showthread.php3?t=157145

 

 以上就是我解决这个问题的一个思考及解决过程。

相关阅读 更多 +
排行榜 更多 +
uu飞人

uu飞人

生活实用 下载
运荔枝司机版

运荔枝司机版

旅游住宿 下载
哒哒充电

哒哒充电

生活实用 下载