2个回答
展开全部
两种方法:
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;
}
}
}
希望能帮到你!
展开全部
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重置为当前的鼠标坐标,为下一次坐标变化做准备。
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重置为当前的鼠标坐标,为下一次坐标变化做准备。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询