关于鼠标碰撞检测(hitTestPoint)

鼠标碰撞检测

要正确使用关于鼠标的碰撞检测,首先需要弄明白鼠标事件的三个参数

Annie2x的鼠标事件,包含了3个坐标点的参数:attachments-2018-08-Hs7tJ0Ta5b7ecdced171d.jpg

clientX,clientY,是相对于屏幕的坐标;stageX,stageY是相对于舞台的坐标;localX,localY是相对于某个元件的内部本地坐标。

如果需要点击舞台,将某个元件加入到舞台:

s.addEventListener(annie.MouseEvent.MOUSE_DOWN,_down);

function _down(e){

var p=new a2x.TestBall();

s.addChild(p);

                p.x=e.clientX;

p.y=e.clientY;

}

代码运行如下:


attachments-2018-08-lxLqYMiJ5b7ed063eeb71.jpg因为使用了clientX,clientY,将会发现蓝色的圆形的位置和鼠标的实际位置相差一段距离

如果使用了stageX,stageY,则鼠标位置,和圆形的位置是一致的,如下图:

attachments-2018-08-vKCF1toO5b7ed109699ae.jpg按我的想象,在小球使用stageX,stageY的情况下,小球的位置刚好是鼠标的位置,那么如果要检测鼠标是否碰撞到红色的方块的话,就应该使用:hitTestPoint(new annie.Point(e.stageX,e.stageY),true);

但是实际去运行的话,会发现,检测不到碰撞,显然碰撞区域是不对的。

于是改成:hitTestPoint(new annie.Point(e.clientX,e.clientY),true);并把小球添加到e.clientX,e.clientY的位置。

attachments-2018-08-lxLqYMiJ5b7ed063eeb71.jpg

虽然鼠标的位置和小球的位置相差很远,但是检测鼠标碰撞确实正常的。
总结:如果要检测鼠标在舞台是是否碰撞到某个元件,应该使用hitTestPoint(new annie.Point(e.clientX,e.clientY),true);

你可能感兴趣的文章

相关问题

2 条评论

请先 登录 后评论
不写代码的码农
大海

技术人员

1 篇文章

作家榜 »

  1. 大北兔 15 文章
  2. 皮卡丘先生 13 文章
  3. hero 10 文章
  4. vien007 7 文章
  5. ningbnii 4 文章
  6. Even 4 文章
  7. 炸天 4 文章
  8. anlun214 4 文章