Actionscript 3 AS3使用鼠标缩放MC。。。某种程度上

Actionscript 3 AS3使用鼠标缩放MC。。。某种程度上,actionscript-3,Actionscript 3,我试图通过单击并拖动矩形来缩放它。下面的代码可以工作,有点,但我正在寻找性能和准确性方面可能的改进。这样做的目的是在水平方向上单击、拖动并调整大小。一件令人沮丧的事情是,当鼠标按下时,它停止滚动,但不再在MC上滚动 var isPressed:Boolean = false; mcMXredBox.addEventListener(MouseEvent.MOUSE_MOVE, moved); mcMXredBox.addEventListener(MouseEvent.MOUSE_DOWN,

我试图通过单击并拖动矩形来缩放它。下面的代码可以工作,有点,但我正在寻找性能和准确性方面可能的改进。这样做的目的是在水平方向上单击、拖动并调整大小。一件令人沮丧的事情是,当鼠标按下时,它停止滚动,但不再在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;
}

MouseEvent.MOUSE\u MOVE
MouseEvent.MOUSE\u UP
事件添加到父显示对象或舞台

例如:

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

我会将其更改为如下内容:

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

通过在按下鼠标时添加侦听器(释放时删除),您不再需要轮询鼠标是否已按下,这样在不拖动鼠标时可以节省性能。添加到stage将解决当鼠标不再位于对象上方时它没有注册的问题。最后,在计算拖动的数学公式时,有一些调整。

是的,效果更好。轮询是有意义的,拖动的调整也能更好地工作。MC稍微向缩放方向移动是否有原因?例如,向上缩放也会将其向右拉一点?符号的注册点是否位于最左侧边缘(x=0)?如果没有,那可能会导致对象在缩放时移动。是的,也尝试过移动它,但它不是静止的。我猜这是在拖动或其他的数学中。在没有看到FLA文件的情况下,这是一个有点棘手的问题,上面的数学没有任何问题,它只是通过鼠标移动的量来扩展宽度。这是FLA文件中唯一的代码,所以我再看看注册点。(稍后我将在另一个文件中使用它,但出于测试目的,在学习AS3的同时,我将在一个新文件中开始工作。)