您的位置: 首页 > 软件教程 > Adobe Flash教程专题 > FLASH AS教程:鼠标拖拽与旋转MC

FLASH AS教程:鼠标拖拽与旋转MC

8.4分
出处:网络 时间:2012-03-30

您可能感兴趣的话题: FLASH  

核心提示:在网上看到某个游戏既要拖拽mc又要旋转mc,拖拽用鼠标事件实现,而旋转需要用shift+鼠标click事件。总觉得太麻烦了。

  在网上看到某个游戏既要拖拽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;

  

    }

   }

  }

网友评论
精品软件课程
更多 >
Dreamweaver是网页制作和管理的所见... [详细]
MySQL是一个小型关系型数据库管理系统,被... [详细]
PHP是一种 HTML 内嵌式的语言,是一种... [详细]
HTML的中文叫做“超文本标记语言”。是用来... [详细]
Dreamweaver是网页制作和管理的所见... [详细]
JavaScript是基于对象和事件驱动并具... [详细]