加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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就表示不是透明区域,
这样就得到了想要的对象,如果你不想要这个对象,可以继续遍历,根据对像类型,返回你想要的。
 
 
具体实现大家可以自己去试试~~  不浪费时间了 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读