2009-12-22 153 views
0

任何人都可以請幫助我。 附上的是我正在爲一個項目工作的部分代碼。鼠標不起作用

在鼠標的幫助下,您可以在圖像上繪製一個圓,但由於某些原因,鼠標上移事件不起作用。它可以在事件監聽器連接到舞臺時正常工作,但在連接到動畫片段時不起作用。

如何限制只能在矩形的動畫片內繪製的圓。

這裏是代碼

const CANVAS:Sprite = new Sprite(); 
var _dragging:Boolean = false; 
var _corner:Point; 
var _corner2:Point; 

menFront.addEventListener(MouseEvent.MOUSE_DOWN, setAnchor); 
menFront.addEventListener(MouseEvent.MOUSE_UP, completeRect); 


function setAnchor(e:MouseEvent):void{ 
    trace("mouse down"); 
    if(!_dragging){ 
     CANVAS.graphics.clear(); 

     _corner = new Point(e.stageX, e.stageY); 
     _dragging = true; 
     menFront.addEventListener(MouseEvent.MOUSE_MOVE, liveDrag); 
    } 
} 

function completeRect(e:MouseEvent):void{ 
    trace("mouse up"); 
    if(_dragging){  
     _dragging = false; 
     menFront.removeEventListener(MouseEvent.MOUSE_MOVE, liveDrag); 
     CANVAS.graphics.lineStyle(0, 0, 0); 
     CANVAS.graphics.beginFill(0x222222,.5) 

     _corner2 = new Point(e.stageX, e.stageY); 
     trace(Point.distance(_corner,_corner2).toFixed(2)); 
     CANVAS.graphics.drawCircle(_corner.x, _corner.y, Point.distance(_corner,_corner2)); 
     addChild(CANVAS); 
    } 
} 

function liveDrag(e:MouseEvent):void{ 
    CANVAS.graphics.clear(); 
    CANVAS.graphics.lineStyle(0, 0x999999); 

    _corner2 = new Point(e.stageX, e.stageY); 
    //trace(Point.distance(_corner,_corner2).toFixed(2)); 
    CANVAS.graphics.drawCircle(_corner.x, _corner.y, Point.distance(_corner,_corner2)); 
    addChild(CANVAS); 
} 
+0

嘿,你應該投票或標記爲回答你的問題。如果您覺得我可以提供更多幫助,請發表評論,我會更充分地充實我的答案。 – alecmce 2010-02-27 22:52:58

回答

3

如果添加發生MouseEvent.MOUSE_UP到您正在拖動對象,該事件將只有火,如果該項目是鼠標下方此刻的MOUSE_UP發生,但由於您使用MOUSE_MOVE更新了該項目,這是MOUSE_UP發生和MOUSE_MOVE發生時的競爭條件。

爲了避免出現這樣的問題,您希望確保在MOUSE_UP觸發時您會收到MOUSE_UP,並且在您的實時更新週期中。要做到這一點,該事件偵聽器添加到真實需要的只是當它的舞臺,是這樣的:

menFront.addEventListener(MouseEvent.MOUSE_DOWN, setAnchor); 

function setAnchor(event:MouseEvent):void 
{ 
    stage.addEventListener(MouseEvent.MOUSE_UP, completeRect); 
    // your other functionality 
} 

function completeRect(event:MouseEvent):void 
{ 
    stage.removeEventListener(MouseEvent.MOUSE_UP, completeRect); 
    // your other functionality 
} 

讓您completeRect不會被調用不經意間,如果你點擊其他地方。

希望這有助於

+0

這也許是有趣的: http://github.com/alecmce/as3geometry/blob/master/src/ui/interactive/DragMechanism.as – alecmce 2009-12-22 09:43:45

+0

只要注意到我在以前的評論中的鏈接是out-of-日期:https://github.com/alecmce/as3geometry/blob/master/src/alecmce/ui/interactive/DragMechanism.as – alecmce 2013-12-30 19:08:43