要正确使用关于鼠标的碰撞检测,首先需要弄明白鼠标事件的三个参数
Annie2x的鼠标事件,包含了3个坐标点的参数:
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;
}
代码运行如下:
因为使用了clientX,clientY,将会发现蓝色的圆形的位置和鼠标的实际位置相差一段距离
如果使用了stageX,stageY,则鼠标位置,和圆形的位置是一致的,如下图:
按我的想象,在小球使用stageX,stageY的情况下,小球的位置刚好是鼠标的位置,那么如果要检测鼠标是否碰撞到红色的方块的话,就应该使用:hitTestPoint(new annie.Point(e.stageX,e.stageY),true);
但是实际去运行的话,会发现,检测不到碰撞,显然碰撞区域是不对的。
于是改成:hitTestPoint(new annie.Point(e.clientX,e.clientY),true);并把小球添加到e.clientX,e.clientY的位置。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!