AS3 如何让鼠标不响应透明区域
发布时间:2020-12-15 07:00:57 所属栏目:百科 来源:网络整理
导读:废话不多说 ,直接上代码 /** * 单像素检测 * @return * */public function hitTestPoint(dis:DisplayObject):Object{//获取鼠标下所有显示对象,注意getObjectsUnderPoint方法用的是坐标var objs:Array = getObjectsUnderPoint(dis.localToGlobal((new Point
废话不多说 ,直接上代码
/** * 单像素检测 * @return * */ public function hitTestPoint(dis:DisplayObject):Object { //获取鼠标下所有显示对象,注意getObjectsUnderPoint方法用的是坐标 var objs:Array = getObjectsUnderPoint(dis.localToGlobal((new Point(dis.mouseX,dis.mouseY))); for each (var i:int in objs) { return checkSinglePointCollesion(objs[i]); } } private function checkSinglePointCollesion(target:DisplayObject):Object { var sigBmd:BitmapData = new BitmapData(1,1,true,0);//创建单像素点 var m:Matrix = new Matrix(); m.tx = - target.mouseX; m.ty = - target.mouseY; sigBmd.draw(target,m,null,sigBmd.rect); var alphaValue:uint = sigBmd.getPixel32(0,0) >> 24 & 0xff; if(alphaValue>0)return target; return null; } 解释一下把,该方法主要是解决鼠标点击问题,比如一个游戏场景中掉落了一个极品装备,结果备一大堆怪和玩家挡住了,或者一堆人挤在一个物品回收员附近,如果不做处理 鼠标将无法准确的点击到装备或者物品回收员等类似的问题,还要上述办法可以很好的解决, 首先我们通过<pre name="code" class="html">getObjectsUnderPoint方法获取鼠标下所有显示对象列表,当然你可以对获取到的列表排序,设定优先级等操作, 之后我们在鼠标坐标下创建一个单像素点,用于和这些显示对象上的相同位置的点进行差值,如果获取的alpha通道值大于0就表示不是透明区域, 这样就得到了想要的对象,如果你不想要这个对象,可以继续遍历,根据对像类型,返回你想要的。 具体实现大家可以自己去试试~~ 不浪费时间了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |