2011-05-19 85 views
0

嘿大家, 我的代碼列在下面。Flash AS3 - StartDrag()內的兒童影片剪輯內的StartDrag()

正如你所看到的,我有一個容器MC,我已經加入舞臺。我使用Rectangle()設置了其阻力約束。然後我在容器中添加'貓'小孩動畫片段,並且我希望它也可以拖動。但是,一旦我在測試MC時點擊我的貓,它在舞臺上射擊指向x = 0 y = 0並且不移動。

容器MC可以移動沒有任何問題。

如果我從容器的startdrag()函數中刪除矩形邊界。兩個MC都可以被拖拽而沒有任何問題。

任何幫助將是可怕的。

感謝

//panning ability 
my_x = 800 - myImage.width; 
my_y = 480 - myImage.height; 

myWidth = 0 - my_x; 
myHeight = 0 - my_y; 

container.addEventListener(MouseEvent.MOUSE_DOWN, bgMouseDown); 
container.addEventListener(MouseEvent.MOUSE_UP, bgMouseUp); 

function bgMouseDown(evt:MouseEvent):void 
{ 
    var object = evt.currentTarget; 
    object.startDrag(false, new Rectangle(my_x, my_y, myWidth ,myHeight)); 
} 

function bgMouseUp(evt:MouseEvent):void 
{ 
    var object = evt.currentTarget; 
    object.stopDrag(); 
} 

//adding ze cat 

cat = new ACat(); 
container.addChild(cat); 
cat.x = 100; 
cat.y = 400; 


cat.addEventListener(MouseEvent.MOUSE_DOWN, catMouseDown); 
cat.addEventListener(MouseEvent.MOUSE_UP, catMouseUp); 


function catMouseDown(evt:MouseEvent):void 
{ 
    var object = evt.currentTarget; 
    object.startDrag(false); 
} 

function catMouseUp(evt:MouseEvent):void 
{ 
    var object = evt.currentTarget; 
    object.stopDrag(); 
} 
+0

evt.stopPropagation()解決了我的問題!張貼這個答案,我會將其標記爲一個。 – MWard 2011-05-21 12:51:32

+0

已經做了星期五:) – 2011-05-23 16:14:25

回答

0

在catMouseDown函數的第一行嘗試evt.stopPropagation()

也試試cat.addEventListener(MouseEvent.MOUSE_DOWN, catMouseDown, true);

0

我認爲你必須測試至極爲currentTarget 因爲當你拖動貓MC引發該事件的容器

嘗試類似的東西:

function bgMouseDown(evt:MouseEvent):void 
{ 
    var object = evt.currentTarget; 
    if(evt.currentTarget !=container) return; 
    object.startDrag(false, new Rectangle(my_x, my_y, myWidth ,myHeight)); 
} 
+1

將您的代碼包裹在大括號中;) – Bosworth99 2011-05-19 22:20:16

0

從容器中移除偵聽器,併爲可拖動對象創建一個基類。

package 
{ 
    import flash.display.Sprite; 
    import flash.geom.Rectangle; 
    import flash.events.MouseEvent; 

    public class Dragable extends Sprite 
    { 
     // vars 
     private var _rect:Rectangle; 

     /** 
     * Constructor 
     */ 
     public function Dragable() 
     { 
      addEventListener(MouseEvent.MOUSE_DOWN, _drag); 
      addEventListener(MouseEvent.MOUSE_UP, _drop); 
     } 

     /** 
     * MOUSE_DOWN 
     */ 
     private function _drag(e:MouseEvent):void 
     { 
      if(_rect != null) startDrag(false, _rect); 
      else startDrag(); 
     } 

     /** 
     * MOUSE_UP 
     */ 
     private function _drop(e:MouseEvent):void 
     { 
      stopDrag(); 
     } 

     /** 
     * Define a boundary Rectangle 
     * @param rect The Rectangle to define 
     */ 
     public function set boundaries(rect:Rectangle):void 
     { 
      _rect = rect; 
     } 
    } 
} 

這樣列出的優點太多了。