当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > AS教程:鼠标拖拽与旋转MC

ActionScript
ActionScript3教程:语句实例
ActionScipt技巧和开发中会遇到的问题
Flash as3.0教程:弹性小球
flash as简单制作飘雪动画
Flash AS 教程:交互动画
Flash ActionScript 3.0教程:学习Dot类
Flash AS 教程:子类化显示对象
Flash AS 教程:动画事件
Flash AS 教程:创建文档类(Document class)
Flash AS 教程:帧循环
Flash AS 教程:类和面向对象编程
Flash AS 教程:构造函数(Constructor)
Flex程序开发心得小结
Flash游戏开发教程:第一节
FLASH中的元件能在Flex中完美使用
关于XML在FLASH中的应用
Flash AS教程:decorator Pattern
Flash AS实例教程:简单的loading
Flash教程:彻底学习RadioButton组件
Flash AS教程:复制粘贴类

ActionScript 中的 AS教程:鼠标拖拽与旋转MC


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 160 ::
收藏到网摘: n/a

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