废话不多说 ,直接上代码
/**
* 单像素检测
* @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,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就表示不是透明区域,
这样就得到了想要的对象,如果你不想要这个对象,可以继续遍历,根据对像类型,返回你想要的。
具体实现大家可以自己去试试~~ 不浪费时间了