as3.0鼠标向左向右移动检测

检测鼠标拖动元件当鼠标向左拖动元件就向左移动当鼠标向左拖动元件就向左移动... 检测鼠标拖动元件 当鼠标向左拖动元件就向左移动 当鼠标向左拖动元件就向左移动 展开
 我来答
gjsgdhr
2013-12-06 · TA获得超过1800个赞
知道小有建树答主
回答量:665
采纳率:77%
帮助的人:464万
展开全部

两种方法:

1.最简单的方法:

在侦听MouseEvent.MOUSE_DOWN的函数下使用mc.startDrag(),然后在侦听MouseEvent.MOUSE_UP的函数下使用mc.stopDrag();

缺点:每次只能拖拽一个对象,偶尔会有误判导致鼠标释放了还是跟随鼠标

2.常用的方法

侦听MouseEvent.MOUSE_DOWN、MouseEvent.MOUSE_UP、MouseEvent.MOUSE_MOVE

设一个Point变量记录之前的点击点或经过的点,在MouseEvent.MOUSE_MOVE的侦听函数中实时改变位置然后将这个变量设为当前的坐标

第2个方法可以避免第一个方法中的问题,而且可以一次拖拽多个物体

假设元件是mc,代码如下:

第一种方法:

//最好用stage侦听,避免误判的情况出现
stage.addEventListener(MouseEvent.MOUSE_DOWN,dragHandle);
stage.addEventListener(MouseEvent.MOUSE_UP,dragHandle);
//函数
function dragHandle(e:MouseEvent):void
{
    //确保点击的是mc
    if (e.target==mc)
    {
        if (e.type==MouseEvent.MOUSE_DOWN)
        {
            mc.startDrag();
        }
        if (e.type==MouseEvent.MOUSE_UP)
        {
            mc.stopDrag();
        }
    }
}

第二种方法:

//最好用stage侦听,避免误判的情况出现
stage.addEventListener(MouseEvent.MOUSE_DOWN,dragHandle);
stage.addEventListener(MouseEvent.MOUSE_UP,dragHandle);
//声明一个储存位置的点,这个点可以保证移动鼠标后元件相对于鼠标的位置不变
var position:Point = new Point();
//指示当前是否按下了鼠标
var mouseDown:Boolean = false;
//函数
function dragHandle(e:MouseEvent):void
{
    //确保点击的是mc,用contains函数更准确一些
    if (e.target.contains(mc))
    {
        if (e.type==MouseEvent.MOUSE_DOWN)
        {
            position.x = mc.mouseX;
            position.x = mc.mouseY;
            mouseDown = true;
        }
        if (e.type==MouseEvent.MOUSE_UP)
        {
            mouseDown = false;
        }
        if (e.type==MouseEvent.MOUSE_MOVE && mouseDown)
        {
            mc.x = mc.parent.mouseX - position.x;
            mc.y = mc.parent.mouseY - position.y;                     
        }        
    }
}

希望能帮到你!

briver686
推荐于2016-09-16 · TA获得超过479个赞
知道小有建树答主
回答量:310
采纳率:100%
帮助的人:220万
展开全部
AS3.0的影片剪辑元件可以直接调用startDrag()方法开始拖动,调用stopDrag()方法停止拖动,一般思路如下(假设元件实例名为mc):
mc.addEventListener(MouseEvent.MOUSE_DOWN,dragStart);
mc.addEventListener(MouseEvent.MOUSE_UP,dragStop);

function dragStart(evt:MouseEvent):void{
mc.startDrag();

}

function dragStop(evt:MouseEvent):void{
mc.stopDrag();

}

补充:startDrag()方法有两个参数,第一个是布尔值,如果是false,则和普通的拖动一样,如果是true,则每次开始拖动时会自动把mc的中心位置锁定到鼠标位置,默认是false;第二个参数是一个Rectangle变量,就是一个矩形范围,表示只能在该范围内拖动元件,如果留空则表示可以在舞台上任意范围内拖动。如果希望元件只能左右拖动,那么将矩形的高设置为0就可以了,元件就不能上下拖动了。

如果按照你的想法,那么需要一个变量,例如curMouseX来记录当前鼠标的坐标,然后按下鼠标时添加一个MOUSE_MOVE的侦听器,再利用ENTER_FRAME侦听器,用当前的鼠标坐标减去curMouseX的值求出鼠标坐标的变化,把这个变化的值赋给元件的x属性,然后将curMouseX重置为当前的鼠标坐标,为下一次坐标变化做准备。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式