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

ActionScript
FLASH 3D相册之利用BitmapData类制作
Flash 脚本游戏开发教程 第一课
Flash 脚本游戏开发教程第二课
Flash 脚本游戏开发教程第三课
Flash 脚本游戏开发教程第四课
Flash 脚本游戏开发教程第五课
Flash 脚本游戏开发教程第六课
Flash 脚本游戏开发教程第七课
Flash 脚本游戏开发教程第八课
Flash AS实现的蝌蚪摆尾动画的教程
从基础开始深入学Flash AS3教程(4)(译文)
从基础开始深入学Flash AS3教程(5)(译文)
从基础开始深入Flash AS3教程(2)(译文)
从基础开始深入学Flash AS3教程(3)(译文)
Flash AS3对单个图片进行角色动作化处理
从基础开始深入Flash AS3教程(1)(译文)
Flash教程:if条件语句的用法
Flash AS教程:_visible属性的详细讲解
Flash AS教程:图片环绕旋转效
Flash教程:trace()的使用

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 156 ::
收藏到网摘: 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;
  
  }
 }
}