用AS3实现拖拽效果,拖对了 就放在该位置,拖错了,反弹回去。谁帮我整一下。谢谢

2025-02-25 15:55:00
推荐回答(2个)
回答1:

拖拽用startDrag
mouseDown的时候记录被拖拽对象的x、y坐标。
然后执行startDrag。松开的时候再判断你所需要的条件,如果满足条件就stopDrag,不满足条件对象就重新返回到你刚记录的xy坐标。

//创建一个被拖拽的对象,并绘制一个成一个黑色的方块
var dragObject:Sprite = new Sprite();
dragObject.graphics.beginFill(0);
dragObject.graphics.drawRect(0, 0, 100, 100);
dragObject.graphics.endFill();
this.addChild(dragObject);
//添加鼠标按下侦听
dragObject.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
//定义记录坐标的变量
var oldX:Number;
var oldY:Number;
//执行按下事件
function onMouseDown(e:MouseEvent):void
{
//添加松开鼠标事件
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
dragObject.startDrag();//对象开始拖拽
//记录当前拖拽对象的坐标
oldX = dragObject.x;
oldY = dragObject.y;
}
function onMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
dragObject.stopDrag();
//添加判断,如果符合条件就返回
if (dragObject.x > 200)
{
dragObject.x = oldX;
dragObject.y = oldY;
}
}

回答2:

上面回答的基本方法正确,但是建议不要直接对操作对象进行拖拽,这在实际工作当中是不可取的,原因是容易出现鼠标快速移动时,脱节和滞帧的现象,正确方法是,建立隐藏的区域对象,实现拖拽操作,然后让可见的拖拽对象跟随隐藏拖拽区域对象。这样不会出现脱节,动画也很流畅。