2009-06-02 13 views
0

Ich muss das untergeordnete Element (MovieClip) aus dem übergeordneten (MovieClip) beim Ziehen und fügen Sie das gleiche Kind (MovieClip) zu einem anderen MovieClip beim Ablegen hinzufügen.So entfernen Sie untergeordnete (Movieclip) und neue überlagern (Movieclip)

wird diese Methode für

Ziehen verwendet
function pickUp(event:MouseEvent):void 
{ 
    event.target.startDrag(); 
} 

, wenn ich es fallen

function dropIt(event:MouseEvent):void 
{ 
    event.target.parent.removeChild(event.target); //for removing from previous parent clip 

    event.target.dropTarget.parent.addChild(event.target); // add to new Moviclip 
} 

Aber der Clip nicht sichtbar oder nicht verfügbar ist, während fallen ...

mir Hilfe zu überwinden von diesem Problem.

Antwort

1

Ich hatte ein schnelles Spiel, hier ist das, was ich kam mit:

Mein Beispiel eine MovieClip- auf der Bühne „Ball“, und eine Reihe von anderen MovieClip- zur Verwendung verstreut herum, als Ablageziele genannt hat.

ball.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
stage.addEventListener(MouseEvent.MOUSE_UP, dropIt); 

function pickUp(event:MouseEvent):void 
{ 
    var ballPoint:Point = ball.parent.localToGlobal(new Point(ball.x, ball.y)); 

    ball.parent.removeChild(ball); 
    addChild(ball); 
    ball.x = ballPoint.x; 
    ball.y = ballPoint.y; 
    ball.startDrag(); 
} 

function dropIt(event:MouseEvent):void 
{ 
    ball.stopDrag(); 
    if(!event.target.dropTarget) { return }; 

    var dropT:MovieClip = event.target.dropTarget.parent; 
    var ballPoint:Point = dropT.globalToLocal(new Point(ball.x, ball.y)); 

    ball.parent.removeChild(ball); 
    dropT.addChild(ball); 
    ball.x = ballPoint.x; 
    ball.y = ballPoint.y; 
} 

Grundsätzlich ist der PickUp handler entfernt den „Ball“ MovieClip- von seinem übergeordneten, und fügt sie den Wurzeldisplay. Dies stellt sicher, dass der Ball oben ist, so dass das DropTarget funktioniert (dropTarget funktioniert nur mit Objekten, die in der Stapelreihenfolge niedriger sind). Die X/Y-Position des Balls wird (unter Verwendung von localToGlobal) für sein neues Elternelement berechnet und angewendet. Dann wird der Start-Drag aufgerufen.

Der dropIt-Handler ruft zuerst stopDrag auf und kehrt dann zurück, wenn dropTarget nicht gefunden werden kann. Eine neue x/y-Position für den Ball wird dieses Mal mit globalToLocal berechnet, um seine neue Position in seinem Droptarget zu erhalten. Der Ball wird dann entfernt und zu seinem neuen Elternteil (dem DropTarget) hinzugefügt. Die neue Position wird angewendet.

Scheint in meinem Fall wirklich gut zu funktionieren.

Auch ... Ich fand, dass ein guter Weg, um zu testen, ob es funktioniert, ist, vorübergehend verschiedene Unschärfe oder DropShadow Filter auf die DropTargets auf der Bühne anzuwenden. Wenn du den Ball auf sie legst, erbt er den Filter und du kannst ein visuelles Feedback sehen.

+0

Vielen Dank für Ihre Antwort. Ich werde es versuchen . – vineth

+0

'ball.parent.removeChild (ball);' in 'dropIt()' wirft einen Fehler, da die 'parent'-Eigenschaft 'null' sein sollte, wenn Sie sie in' pickUp' entfernen. Nebenbei bemerkt, Sie müssen 'removeChild()' nicht tatsächlich aufrufen, da 'addChild()' es vor dem Hinzufügen von allen aktuellen Eltern entfernt – divillysausages

Verwandte Themen