AS3使用鼠标工作缩放MC ......有点像

时间:2012-02-29 10:48:32

标签: actionscript-3

我正在尝试通过单击并拖动它来缩放矩形。下面的代码有效,有点,但我正在寻找性能和准确性方面的可能改进。想法是在水平方向上单击,拖动和调整大小。令人沮丧的是,当鼠标处于向下但不再在MC上时,它会停止滚动。

var isPressed:Boolean = false;

mcMXredBox.addEventListener(MouseEvent.MOUSE_MOVE, moved);
mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed);
mcMXredBox.addEventListener(MouseEvent.MOUSE_UP, released);


function moved(e:Event):void{
if (isPressed) 
this.scaleX = 1 + (mouseX/100);
}

function pressed(e:MouseEvent):void{
isPressed = true;
moved(e);
}
function released(e:MouseEvent):void{
isPressed = false;
}

2 个答案:

答案 0 :(得分:1)

我将其更改为如下所示:

mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed);

var initMouseX;

function moved(e:Event):void{
    this.width += (mouseX - initMouseX);
    initMouseX = mouseX;
}

function pressed(e:MouseEvent):void{
    initMouseX = mouseX;

    stage.addEventListener(MouseEvent.MOUSE_UP, released);
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moved);

    moved(e);
}

function released(e:MouseEvent):void{
    stage.removeEventListener(MouseEvent.MOUSE_UP, released);
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, moved);
}

通过在按下鼠标时添加侦听器(并在释放时删除),您不再需要轮询以查看鼠标是否已关闭,这样可以在不拖动时保存性能。添加到舞台将解决您的问题,即当鼠标不再在对象上时它不会注册。最后,还有一些调整来计算拖动的数学。

答案 1 :(得分:0)

MouseEvent.MOUSE_MOVEMouseEvent.MOUSE_UP事件添加到父显示对象,或者可能是舞台。

例如:

mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN, pressed);
stage.addEventListener(MouseEvent.MOUSE_MOVE, moved);
stage.addEventListener(MouseEvent.MOUSE_UP, released);