需要将此Object移向一个方向

时间:2013-03-27 01:26:34

标签: actionscript-3

我试图将这个seatBelt对象移动到水平面上。我已经发布了迄今为止所做的事情。它并没有真正发挥作用,因为似乎一旦我按下按钮,安全带只能向右侧移动而且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;

    }

3 个答案:

答案 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;
        }
    } 

答案 1 :(得分:0)

你所拥有的内容大多看起来都不错,除了我认为发生的事情是你在舞台上“捣乱”/在seatBelt对象之外的某个地方。我猜这是为了让对象移动你让它对鼠标移动做出反应...我猜你正在将鼠标移动到整个舞台上并从安全带对象移开,此时你将释放鼠标。

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

我猜你想要的行为就是你想让对象在任何点停止移动,无论鼠标在哪里被释放。为此,请尝试将MOUSE_UP事件侦听器添加到舞台:

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

尽管如此,由于您可能并不总是希望此侦听器处于活动状态,因此可能只有在按下鼠标时才添加它,只需根据需要添加和删除侦听器。

我已经编辑了一些代码以显示我的意思并取出了“mouseclick”布尔值,因为它不再需要跟踪鼠标向下/向上事件:

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);
}

答案 2 :(得分: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);
}