2009-11-08 9 views
1

J'ai une occurrence de MovieClip qui peut être déplacée autour de la scène en utilisant startDrag() et stopDrag(). L'instance a également des MovieClips enfants utilisant addChild(). Le parent déplace les enfants en faisant glisser, ce qui est bien. Les enfants ont leur propre startDrag() et stopDrag() qui devraient s'appliquer uniquement à l'objet enfant, mais il déplace également le parent et les autres enfants. Lorsque vous cliquez sur un enfant, l'événement MouseEvent de l'enfant est appelé, tout comme le parent.AS3 - L'enfant déplace le parent en utilisant startDrag

public class Component extends MovieClip { 
    private var nodes_array:Array = new Array(); 

    public function Component() { 
     x = 60; 
     y = 100; 

     nodes_array.push(addChild(new Node(50, 50))); 
     nodes_array.push(addChild(new Node(150, 150))); 

     addEventListener(MouseEvent.MOUSE_DOWN, startDraggingComponent); 
     addEventListener(MouseEvent.MOUSE_UP, stopDraggingComponent); 
    } 
    private function startDraggingComponent(me:MouseEvent):void { 
     this.startDrag(); 
    } 
    private function stopDraggingComponent(me:MouseEvent):void { 
     this.stopDrag(); 
    } 


    public class Node extends MovieClip { 

    public function Node(x:int, y:int) { 
     this.x = x; 
     this.y = y; 

     addEventListener(MouseEvent.MOUSE_DOWN, startDraggingNode); 
     addEventListener(MouseEvent.MOUSE_UP, stopDraggingNode); 
    } 
    private function startDraggingNode(me:MouseEvent):void { 
     this.startDrag(); 
    } 
    private function stopDraggingNode(me:MouseEvent):void { 
     this.stopDrag(); 
    } 

Répondre

3

Dans le programme d'écoute de la classe Node, vous devez appeler e.stopImmediatePropagation();. Cela empêchera l'événement de bouillonner jusqu'à son parent.