忽略PNG透明区域的事件
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-07
有时候我们希望加载PNG后其透明区域不响应事件.. 网上的一般的方法为~ 先获取其bitmapData对象.. 当进行点击操作时使用.. bitmapData.getPixel32(x,y)获取.. 点击位置的是否透明.. 然后再操作... 而mosueOver与mouseOut等事件稍为复杂点.. 需要侦听mouseMove.. 然后对经过的坐标进行透明判断~~再抛出相应的事件... 今天介绍的方法原理跟上面差不多.. 不过我们使用Sprite的另一个属性hitArea..( 关于hitArea的说明请查看这里 ) 在图像加载完毕后.. 先绘制一个去除了透明部份的Sprite.. 然后把该Sprite指定为源对象的hitArea.. 先看看效果: 代码也很简单:main.mXML 01.<?xml version="1.0" encoding="utf-8"?> 02.<mx:Application xmlns:mx=" http://www.adobe.com/2006/mxml " layout="absolute" xmlns:local="*"> 03.<mx:Script> 04.<![CDATA[ 05.import mx.managers.CursorManager; 06.private function abc(e:MouseEvent):void 07.{ 08.if(e.type == "mouseOver") 09.{ 10.CursorManager.setBusyCursor(); 11.}else 12.{ 13.CursorManager.removeBusyCursor(); 14.} 15.} 16.]]> 17.</mx:Script> 18.<local:MyImage source=" /upimg/userup/0908/1210055AR8.jpg " mouseOver="abc(event)" mouseOut="abc(event)" y="25"/> 19.<mx:Image source=" /upimg/userup/0908/1210055AR8.jpg " mouseOver="abc(event)" mouseOut="abc(event)" x="344" y="25"/> 20.</mx:Application> MyImage.as,自定义Image类.. 01.package 02.{ 03.import Flash.display.BitmapData; 04.import flash.display.DisplayObject; 05.import flash.display.Sprite; 06.import flash.events.Event; 07.import flash.geom.Matrix; 08.import flash.utils.setTimeout; 09. 10.import mx.controls.Image; 11./** 12.* 自定义Image类,使之忽略PNG透明区域 13.* @author L4cd.Net 14.*/ 15.public class MyImage extends Image 16.{ 17.private var ht:Sprite = new Sprite(); 18.public function MyImage() 19.{ 20.addChild(ht); 21.hitArea = ht; 22.//指定hitArea为ht对象 23.ht.visible = false; 24.ht.mouseEnabled = false; 25.mouseChildren = false; 26.addEventListener(Event.COMPLETE,complete,false,99,true); 27.setTimeout(update,50) 28.} 29.private function complete(e:Event):void 30.{ 31.setTimeout(update,50) 32.} 33.private function update():void 34.{ 35.if(!content)return; 36.var loader:DisplayObject = content.parent as DisplayObject; 37.var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000); 38.var mat:Matrix = new Matrix(); 39.mat.scale(loader.scaleX,loader.scaleY); 40.bit.draw(loader,mat); 41.//重绘图象到bit 42.ht.graphics.clear(); 43.ht.graphics.beginFill(0); 44.for(var x:uint=0;x<bit.width;x++) 45.{ 46.for(var y:uint=0;y<bit.height;y++) 47.{ 48.if(bit.getPixel32(x,y))ht.graphics.drawRect(x,y,1,1); 49.} 50.} 51.//以graphics画出bit的无透明区域 52.ht.graphics.endFill(); 53.} 54.} 55.} 关键词: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于忽略PNG透明区域的事件的所有评论