2012-02-29 57 views
0

我試圖通過單擊並拖動來縮放矩形。下面的代碼工作,排序,但我正在尋找可能的性能和準確性的改進。這個想法是點擊,拖動和調整大小,只是在水平方向。令人沮喪的是,當鼠標關閉但不再通過MC時,它停止滾動。AS3使用鼠標工作...擴展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; 
} 

回答

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

通過當按下鼠標添加的聽衆,你不再需要輪詢以查看鼠標是否關閉,這樣可以在不拖動時節省性能。添加到舞臺將解決您的問題,即當鼠標不再位於對象之上時,它不會註冊。最後,對拖動的數學進行一些調整。

+0

是的,那效果更好。投票的事情是有道理的,也可以更好地拖延工作。是否有理由讓MC稍微向縮放的方向移動,例如擴大規模也拉動它的權利呢? – user1203605 2012-02-29 11:46:32

+0

符號的註冊點在最左邊(x = 0)?如果不是,那麼縮放時可能會導致對象移動。 – DNJohnson 2012-02-29 11:54:44

+0

是的,試圖移動它,但它不坐靜。我想這是在拖動或其他東西的數學。 – user1203605 2012-02-29 12:02:44

0

添加MouseEvent.MOUSE_MOVEMouseEvent.MOUSE_UP事件父顯示對象,或者也許是舞臺上。

例如:

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