WEB开发网
开发学院图形图像Flash [AS2]Flash中hitTest和hitTestPoint的替代 阅读

[AS2]Flash中hitTest和hitTestPoint的替代

 2012-02-06 12:14:41 来源:本站整理   
核心提示:在开发Flash过程中,发现对于加载进来的SWF,[AS2]Flash中hitTest和hitTestPoint的替代,无法直接使用hitTest和hitTestPoint这类方法直接判断某个像素是否透明后来从这个bloghttp://dougmccune.com/blog/2007/02/03/using-hitte

在开发Flash过程中,发现对于加载进来的SWF,无法直接使用hitTest和hitTestPoint这类方法直接判断某个像素是否透明

后来从这个blog

http://dougmccune.com/blog/2007/02/03/using-hittestpoint-or-hittest-on-transparent-png-images/#comment-47931

发现了一个解决方案,跟我想的一样,但是效率稍微有点差

简单说,这个解决方案就是将DisplayObject绘制到一个BitmapData上,然后根据像素值判断

我的改进方案就是只绘制一个像素到BitmapData上,而不是绘制全部

经过测试,对于150*100尺寸的SWF,优化后的方案每秒可以测试2万次,没有优化的方案1万次。

源码如下

  1. public static function realHitTest(object:DisplayObject, point:Point):Boolean {  
  2. var bmapData:BitmapData = new BitmapData(1, 1, true, 0x00000000);  
  3. var m:Matrix = new Matrix();  
  4. var localPt:Point = object.globalToLocal(point);  
  5. m.tx = -localPt.x;  
  6. m.ty = -localPt.y;  
  7. bmapData.draw(object, m);  
  8.  
  9. var returnVal:Boolean = bmapData.hitTest(new Point(0,0), 128, new Point(0, 0));  
  10.  
  11. bmapData.dispose();  
  12.  
  13. return returnVal;  

Tags:AS Flash hitTest

编辑录入:coldstar [复制链接] [打 印]
赞助商链接