2013-03-27 56 views
0

我正试图将此安全带对象移动到水平面上。我发布了迄今为止我所做的。它并不真正解决问题,因为它好像就像我按下按钮时安全带只能朝右侧移动并且MOUSE_UP不起作用。有人能指导我如何去做这件事吗?需要将此对象向一个方向移动

seatBelt.addEventListener (MouseEvent.MOUSE_DOWN, prsing); 
    seatBelt.addEventListener (MouseEvent.MOUSE_UP, lfting); 
    seatBelt.addEventListener (MouseEvent.MOUSE_MOVE, mving); 




    function prsing (e:MouseEvent){ 
    posX= seatBelt.x ; 
     posY = seatBelt.y ; 
     mouseclick = 1; 


    } 
    function mving (e:MouseEvent) { 
     if (mouseclick == 1) { 
     seatBelt.x = mouseX ; 
     } 
    } 

    function lfting (e:MouseEvent){ 
     seatBelt.x = posX; 
     seatBelt.y = posY; 
     mouseclick =0; 

    } 

回答

1

因此,您的预期功能是能够将座椅安全带沿着x轴拖动并释放以便回到其原始位置?

您需要更改MOUSE_UP和MOUSE_MOVE才能听到舞台而不是seatBelt。这是因为当按钮不再位于seatBelt上方时,可能释放该按钮,因此该功能不会被调用。然而,舞台将接收事件。

stage.addEventListener(MouseEvent.MOUSE_UP, lifting); 
stage.addEventListener(MouseEvent.MOUSE_MOVE, moving); 

我不知道你在哪里声明mouseX可变的,但如果你是在拖动后的功能改变听众:

function moving (e:MouseEvent) { 
     if (mouseclick == 1) { 
     seatBelt.x = e.stageX; 
     } 
    } 
+0

非常感谢它,真是太棒了! – tailedmouse 2013-03-27 01:57:50

+0

@taildmouse没问题:) – Allan 2013-03-27 01:59:20

0

你有大多看起来还行代码明智的,除了我认为正在发生的事情是,你正在舞台上/某处离开seatBelt对象。我猜这是为了让物体移动,让它对鼠标的移动作出反应......我猜测你正在将鼠标移动到舞台上,然后离开安全带物体,然后释放鼠标。

要检查是否属于这种情况,请尝试将鼠标放在seatBelt对象上,查看您的MOUSE_UP事件是否被触发。

我猜你想要的行为是,你想让对象停止移动,无论鼠标放在哪里。要做到这一点,尝试添加MOUSE_UP事件监听器的阶段:

this.stage.addEventListener (MouseEvent.MOUSE_UP, lfting); 

虽然,因为你可能不会总是希望这个监听器是活跃的,也许只有只需添加它时,按下鼠标在对象并根据需要仅删除侦听器。

我已经编辑你的代码有点说明我的意思,并采取了“鼠标点击”布尔,因为它不会真的需要跟踪鼠标的下/上事件了:

seatBelt.addEventListener(MouseEvent.MOUSE_DOWN, prsing); 

function prsing(e:MouseEvent){ 
    posX= seatBelt.x ; 
    posY = seatBelt.y ; 
    this.stage.addEventListener(MouseEvent.MOUSE_MOVE, mving); 
    this.stage.addEventListener(MouseEvent.MOUSE_UP, lfting); 
} 

function mving(e:MouseEvent) { 
    seatBelt.x = mouseX; 
} 

function lfting(e:MouseEvent){ 
    seatBelt.x = posX; 
    seatBelt.y = posY; 
    this.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mving); 
    this.stage.removeEventListener(MouseEvent.MOUSE_UP, lfting); 
} 
+0

它几乎可以解决问题,我需要鼠标点击,否则它不能按预期工作。但非常感谢答案,它的工作很好:D – tailedmouse 2013-03-27 02:10:05

0

您可以使用Sprite.startDrag方法来执行您所需的操作。不需要MOUSE_MOVE侦听器。如果需要查找参数:Sprite.我喜欢一次只有一个MOUSE_DOWN或MOUSE_UP监听器处于活动状态。

seatBelt.addEventListener (MouseEvent.MOUSE_DOWN, prsing); 

function prsing (e:MouseEvent){ 
    seatBelt.startDrag(false, new Rectangle(0,seatBelt.y,stage.width,seatBelt.y)); 
    seatBelt.removeEventListener (MouseEvent.MOUSE_DOWN, prsing); 
    seatBelt.addEventListener (MouseEvent.MOUSE_UP, lfting); 
} 

function lfting (e:MouseEvent){ 
    seatBelt.stopDrag(); 
    seatBelt.addEventListener (MouseEvent.MOUSE_DOWN, prsing); 
    seatBelt.removeEventListener (MouseEvent.MOUSE_UP, lfting); 
} 
+0

恩,我明白了。拖累的唯一问题是,它不会让我对我正在做的事有很大的控制。非常感谢教我新的东西。 – tailedmouse 2013-03-27 02:05:53