2012-07-19 54 views
1

任何人都可以告訴我如何使用AS3實現選取框選擇效果,通過在它們周圍繪製動態矩形來選擇多個動畫片段,然後將它們拖放到任何位置?as3選取框選擇拖動多個子對象

+1

如何詳細回答您的問題?從高級視圖中,跟蹤鼠標的最初點,然後mouseDown和下一個mouseUp之間的每個幀都繪製/重繪一個矩形,以匹配當前鼠標位置和初始鼠標位置。在鼠標上檢測矩形中包含的所有適用的影片剪輯 - 暫時將該列表存儲在某處。添加一些邏輯來處理當你的列表中的一個mc被鼠標擊落時。然後startDrag()它們全部。 – BadFeelingAboutThis 2012-07-19 23:58:13

+1

@LondonDrugs_MediaServices謝謝4回覆,hav已經完成了矩形部分,將hitTestObjects存儲在一個數組中,但是在數組中的任何mcs上mousedown只是拖動該特定mc,而不是其他部分 – 2012-07-20 00:46:12

+3

暫時傳輸所有剪輯你想移動到另一個MovieClip並拖動它。或者,不要真的做一個startDrag()類型的拖動。相反,請根據鼠標的增量調整x和y。 – 2012-07-20 01:39:55

回答

2

如果需要多個對象可拖動,請勿使用startDrag(),因爲它只允許一次拖動一個對象。相反,監聽鼠標事件,並做手動運動:

var oldX:int; 
var oldY:int; 
var dragging:Boolean = false; 

function onMouseDown(evt:MouseEvent):void { 
    dragging = true; 
    oldX = evt.stageX; 
    oldY = evt.stageY; 
} 

function onMouseMove(evt:MouseEvent):void { 
    if (!dragging) return; 
    var dX:int = evt.stageX - oldX; 
    var dY:int = evt.stageY - oldY; 
    for (int i = 0; i < selectedClips.length; i++) { 
     var clip:DisplayObject = selectedClips[i]; 
     clip.x += dX; 
     clip.y += dY; 
    } 
    oldX = evt.stageX; 
    oldY = evt.stageY; 
} 

function onMouseUp(evt:MouseEvent):void { 
    dragging = false; 
} 

此代碼假定:

  1. 你所選對象的數組被稱爲selectedClips
  2. 您所選對象的數組全部從DisplayObject繼承。
  3. 您已經在調用這些函數的MOUSE_DOWNMOUSE_MOVEMOUSE_UP鼠標事件的所有可拖動對象上添加了事件偵聽器。

如果這三個條件中的任何一個都不符合,請更新我的代碼或您的代碼以正常工作。另外,如果在刪除對象時需要執行任何其他處理,則可以使用鼠標上移處理程序來添加自定義代碼。