einfache drag-and-drop-target-as3
Ich würde gerne einen movieclip ziehbar Ziel einem anderen movieclip (drop target).
Braucht er nicht zu haben reusuable Funktion (d.h. Ereignis.Ziel ist jedoch nicht erforderlich und es muß nicht Teil eines Arrays ist.
Ich kann nicht sehen, warum der code unten funktioniert nicht. Ich habe versucht, mit einer assign-symbol (=) statt des Gleichheitsoperators (==) an Orten, aber dies macht keinen Unterschied.
Jedes feedback sehr geschätzt.
//Creating variables to store original x/y position of draggable movieclip (my_mc2):
var startX:Number;
var startY:Number;
//Enabling hand cursor over draggable mc:
my_mc2.buttonMode = true;
//Adding event listeners for mouse up and mouse down.
my_mc2.addEventListener(MouseEvent.MOUSE_DOWN, drag);
my_mc2.addEventListener(MouseEvent.MOUSE_UP, drop);
//Drag function (mouse down):
function drag(event:MouseEvent):void {
startX = my_mc2.x;
startY = my_mc2.y;
my_mc2.startDrag();
}
//Drop function (mouse up):
function drop(event:MouseEvent):void {
my_mc2.stopDrag();
if (my_mc2.x == target_mc2.x && my_mc2.y == target_mc2.y) {
my_mc2.removeEventListener(MouseEvent.MOUSE_DOWN, drag);
} else {
my_mc2.x == startX;
my_mc2.y == startY;
}
}
InformationsquelleAutor hangoJango | 2014-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst
target_mc2
zumy_mc2
Ziel. Es gibt sehr wenig chance, dassmy_mc2
undtarget_mc2
bekommen exakt die gleichen Koordinaten. Folglich sollten Sie sich entscheiden, einen Bereich rund umtarget_mc2
.btw, ich habe verfolgt alles, was im "wenn" Bereich des drop-Funktion. Nichts hat sich da null.
yay! habe die Antwort gefunden (aber ich weiß nicht, die Theorie dahinter). Ich brauchte, um zu verlängern die Objekte ziehen und ablegen (my_mc2 und target_mc2 im Beispiel oben) in der timeline, so dass Sie immer noch existierte, als die Bühne, auf die geklickt wurde später auf. Um zu bekommen, dass, ich nur setzen Sie deren Eigenschaft visible auf false. Tis eine Lernkurve!
dies ist wahrscheinlich die Beträge, um die "Theorie". Ich hatte die drop-Funktion mit einem Ereignis-listener für das stage - (nicht für den drag-Element). Ich habe irgendwo gelesen, dass es besser war das zu tun. Trotzdem, abgesehen vom entfernen der Ereignis-listener für startdrag, ich habe auch entfernt die man für stopdrag.
InformationsquelleAutor helloflash
Bin ich die Beantwortung meiner eigenen Frage mit der alternative code - obwohl es noch nicht klar ist mir, warum der Vorherige code würde nicht funktionieren. Ich denke, es hat etwas zu tun mit diesen:
wenn (my_mc2.x == target_mc2.x && my_mc2.y == target_mc2.y)....
my_mc2.x == startX;
my_mc2.y == startY;
Sowieso, für alle anderen AS3 Neulinge da draußen auf der Suche für ein einfaches workaround, das funktioniert für mich. (Ja, es ist eine wiederverwendbare Funktion, die eine bessere Praxis.)
InformationsquelleAutor hangoJango
nochmals vielen Dank an helloflash für deine Antwort.
Wollte nur aktualisieren Sie dieses Thema für jemand anderes zu versuchen, es aus....
wenn Sie es testen, wenn Sie ziehen Sie das Objekt aus (oder berühren), den Rand der Bühne, es nicht mehr stellt sich neu auf, um seine ursprünglichen Koordinaten.
um dies zu umgehen, erstellen Sie eine bounding-box zu begrenzen, wo es gezogen werden kann. Diese box wird kleiner sein als die Bühne. Die genauen Abmessungen wird einige trial-and-error-passend zu Ihrem Projekt. Es ist einfach zu tun, obwohl. Fügen Sie ein neues Rechteck in das zweite Eigenschaft startDrag (false, new Rectangle (startx, starty, rectanglewidth, rectangleheight), etwa so:
InformationsquelleAutor hangoJango