在网上看到某个游戏既要拖拽喊麦又要旋转mc,拖拽用鼠标事件实现,而旋转需要用变化鼠标点击事件。总觉得太麻烦了。故而希望自己能找到一种只用鼠标就能同时实现拖拽与旋转功能的方法。
结果发现鼠标按下鼠标抬起竟然相当于一次点击事件。即每次释放鼠标左键,停止拖拽时,mc会旋转一次,而这个显然不是预期的效果。
于是,开始明白了,那个程序员为什么要添加变化键的侦听了。
可是,不用变化键就不能实现这种功能吗?开始考虑如何区分鼠标按下鼠标抬起与点击。
方法一:设置时间间隔。时间不太好把握,通过掉。
方法二:用鼠标的相对位置。倘若喊麦未移动则视为点击事件。正解!
复制代码
代码如下:
包{
导入闪光灯.显示器.*;
导入flash.geom .点;
导入闪光。事件。*;
公共类主要的扩展雪碧{
私有var MC:MC;
私有var点击偏移量:点;
私有var鼠标锁定:点;
公共函数main(){
MC=new MC();
addChild(MC);
mc.x=200
mc.y=200
mc.addEventListener(MouseEvent .点击,烂);
mc.addEventListener(MouseEvent .MOUSE_DOWN,开始拖动);
mc.addEventListener(事件回车_帧.拖);
舞台。addevent侦听器(鼠标事件.MOUSE_UP,停止拖动);
}
私有函数startdrag(e:MouseEvent ){
mouseLoc=新点(e.stageX,e . stagey);
点击偏移量=新点(e stagex-MC . x,e stagey-MC。y);
}
私有函数拖动(e:事件){
if(clickOffset==null)返回;
MC。x=鼠标单击偏移量。x;
MC。y=鼠标点击偏移量。y;
}
私有函数stopdrag(e:MouseEvent ){
clickOffset=null
}
私有函数rot(e:MouseEvent){
如果(!鼠标锁定。等于(新点(e . stagex,e.stageY)))返回;
mc.rotation=30
}
}
}