我试图将这个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;
}
答案 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);
}