FLASH AS教程:鼠标拖拽与旋转MC |
在网上看到某个游戏既要拖拽mc又要旋转mc,拖拽用鼠标事件实现,而旋转需求用shift+鼠标click事件 。总感觉太麻烦了 。故而 盼望自己能找到一种只用鼠标就能同时实现拖拽与旋转 性能的 步骤 。 后果发现MOUSE_DOWN+MOUSE_UP居然相当于一次CLICK事件 。即每次 开释鼠标左键, 停留拖拽时,mc会旋转一次,而这个显然不是预期的 动机 。 于是,开始清楚了,那个程序员为何要增加shift键的侦听了 。 可是,不用shift键就不能实现这种 性能吗?我开始考量如何 划分MOUSE_DOWN+MOUSE_UP与CLICK. 。 步骤一:设置 工夫 间隔 。 工夫不太好把握,pass掉 。 步骤二:用鼠标的 绝对位置 。 假使mc未移动则视为click事件 。正解! package{ import flash.display .*; import flash.geom .Point; import flash.events.*; public class main extends Sprite{ private var mc:MC; private var clickOffset:Point; private var mouseLoc:Point; public function main(){ mc=new MC(); addChild(mc); mc.x=200; mc.y=200; mc.addEventListener(MouseEvent.CLICK ,rot); mc.addEventListener(MouseEvent.MOUSE_DOWN,startdrag); mc.addEventListener(Event.ENTER_FRAME. ,drag); stage.addEventListener(MouseEvent.MOUSE_UP,stopdrag); } private function startdrag(e:MouseEvent ){ mouseLoc=new Point(e.stageX,e.stageY); clickOffset=new Point(e.stageX-mc.x,e.stageY-mc.y); } private function drag(e:Event){ if(clickOffset==null) return; mc.x=mouseX-clickOffset.x; mc.y=mouseY-clickOffset.y; } private function stopdrag(e:MouseEvent ){ clickOffset=null; } private function rot(e:MouseEvent){ if(!mouseLoc.equals(new Point(e.stageX,e.stageY)))return; mc.rotation+=30;
} } } |