Actionscript 3 使用ActionScript 3.0沿movieclip拖动

Actionscript 3 使用ActionScript 3.0沿movieclip拖动,actionscript-3,flash,Actionscript 3,Flash,如何沿BG拖动对象一个movieclip也可以拖动一个movieclip。 在BG内移动/拖动对象movieclip BG.addEventListener(MouseEvent.MOUSE_DOWN, DRAG); BG.addEventListener(MouseEvent.MOUSE_UP, DROP); function DRAG (e:MouseEvent) { object.x = e.localX; object.y = e.localY; //object.startDr

如何沿BG拖动对象一个movieclip也可以拖动一个movieclip。 在BG内移动/拖动对象movieclip

BG.addEventListener(MouseEvent.MOUSE_DOWN, DRAG);
BG.addEventListener(MouseEvent.MOUSE_UP, DROP);

function DRAG (e:MouseEvent) {
 object.x = e.localX;
 object.y = e.localY;
 //object.startDrag();

 //code to drag object(movieclip) along BG(movieclip)
}
function DROP (e:MouseEvent) {
 object.stopDrag();
 object.x = 0;
 object.y = 0;
}
已编辑/新代码:

//bg(movieclip)
//obj(movieclip to drag)
//object2(movieclip)

var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
bounds.width = bg.width - obj.width;
bounds.height = bg.height - obj.height;

object2.x = obj.x;
object2.y = obj.y;

object2.addEventListener(TouchEvent.TOUCH_BEGIN, Drag);
object2.addEventListener(TouchEvent.TOUCH_END, Drop);

function Drag(event: TouchEvent): void {
    object2.x = e.LocalX;
    object2.y = e.LocalY;
    e.target.startTouchDrag(e.touchPointID);

    obj.x = e.localX;       
    obj.x = e.localY;   
    obj.startDrag(false, bounds);
}

function Drop(event: TouchEvent): void {
    End_Drag();
}

public function End_Drag():void {
    obj.stopDrag();
    obj.x = bound.x;
    obj.y = bound.y;

    object2.stopTouchDrag(object2.touchPointID);
    object.x = bound.x;
    object.y = bound.y; 
}
我将停止拖动事件函数分开,因为它可以在不同的类中调用

在我编辑的代码中,当我“触碰”object2时,object2和ObjectJ都将其位置更改为我“触碰”的位置,并且没有拖动它们。当我“触摸”object2时,它会重置它们的位置


另外,这些代码用于我的虚拟操纵杆控制器。

创建两个对象:背景背景背景和要拖动的对象对象。

定义矩形区域。对象只能在此区域内移动

var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;
bounds.width = bg.width - obj.width;
bounds.height = bg.height - obj.height;
当鼠标按下时,开始移动obj。鼠标移动到任何位置后停止移动

obj.addEventListener(MouseEvent.MOUSE_DOWN, objDown);

function objDown(event: MouseEvent): void
{
    obj.startDrag(false, bounds);

    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
}

function mouseMove(event: MouseEvent): void
{
    //smooth moving
    event.updateAfterEvent();
}

function mouseUp(event: MouseEvent): void
{
    obj.stopDrag();

    stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
}
更新:


这对BG意味着什么?对象不应超出背景?是的,它应始终命中电影剪辑“背景”。对不起,我的英语不好。也很抱歉我的英语不好。几分钟后我会给你一个答案。谢谢你分享这个代码,但我把MouseeEvent改为TouchEvent,因为这个游戏是为移动设备设计的。但是,我仍然使用你的代码,没有错误,但有一个问题。当我在拖动对象时单击/轻触另一个按钮Movieclip时,对象停止拖动事件不应该发生。我知道该如何处理,但我的代码似乎错误,因为它无法拖动对象。我将编辑我的问题以添加代码,请检查一下。谢谢,谢谢,我试试这个。但是,如果我在拖动obj1或obj2时单击/轻触舞台,它会停止拖动事件吗?不,它不会停止。也可以用两个手指拖动两个对象。嗨。我用你的代码测试了我的应用程序,出现了一个问题。当我在拖动对象时“触摸”另一个点时,它将停止拖动对象。。
import flash.events.TouchEvent;
import flash.display.MovieClip;

var bounds: Rectangle = new Rectangle();
bounds.x = bg.x;
bounds.y = bg.y;

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 

obj1.addEventListener(TouchEvent.TOUCH_BEGIN, objTouchBegin);
obj2.addEventListener(TouchEvent.TOUCH_BEGIN, objTouchBegin);

function objTouchBegin(event: TouchEvent): void
{
    bounds.width = bg.width - event.currentTarget.width;
    bounds.height = bg.height - event.currentTarget.height;

    event.currentTarget.startTouchDrag(event.touchPointID, false, bounds);

    stage.addEventListener(TouchEvent.TOUCH_END, touchEnd);
    stage.addEventListener(TouchEvent.TOUCH_MOVE, touchMove);
}

function touchMove(event:TouchEvent): void
{
    event.updateAfterEvent();
}

function touchEnd(event: TouchEvent): void
{
    event.currentTarget.stopTouchDrag(event.touchPointID);

    stage.removeEventListener(TouchEvent.TOUCH_END, touchEnd);
    stage.removeEventListener(TouchEvent.TOUCH_MOVE, touchMove);
}