欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-07 19:18:15
这篇教程是向脚本之家介绍FLASH AS鼠标拖拽与旋转MC方法,教程很不错,很值得学习,推荐到脚本之家,一起来学习吧... 15-02-28...

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

}
}
}