kostenloser Webspace werbefrei: lima-city


Problem mit Drag&Drop

lima-cityForumDie eigene HomepageFlash und Silverlight

  1. Autor dieses Themas

    freakystyle

    freakystyle hat kostenlosen Webspace.

    Hi.
    Ich versuche etwas Ähnliches wie diese Flashgalerie zu bauen:
    http://www.paulvanroekel.nl/picasa/polaroiddemo/
    Ich verwende aber nur 3 Bilder und wollte daher eine einfach Funktion schreiben für den DragDrop Effekt und zu jedem Bild einen eventListener. Das ganze sieht bis jetzt so aus:

    pic1_mc.addEventListener(MouseEvent.MOUSE_DOWN,picIt);
    pic1_mc.addEventListener(MouseEvent.MOUSE_UP,dropIt);
    
    function picIt(event:MouseEvent):void{
    	 event.target.startDrag(true);
    }
    
    function dropIt(event:MouseEvent):void{
    	event.target.stopDrag();
    }

    Jetzt habe ich aber ein paar Probleme. Erstens Funktioniert die drop-Funktion nicht und ich weiß einfach nicht warum.
    Zweitens "springt" das Bild immer rechts unter die Maus das der Mauszeiger immer im linken oberen Eck des Bildes ist.
    Und drittens weiß ich nun nicht wie ich das angeklickte Bild in den Vordergrund bringe ohne für jedes Bild eine eigene Funktion schreiben zu müssen.

    Ich bin in Flash erst ein Anfänger und hoffe, dass mir von euch jemand helfen kann.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    hallo!

    as3, denk ich mal - immer mit angeben, wenn möglich :-)

    als drittens lautet der F!-suchbegriff "Child Index" und dann wird alles im Buch "Programmieren mit ActionScript 3.0" unter "Verwenden von Anzeigeobjektcontainern" beschrieben.

    sinngemäß bastelst du in deine "function picIt" vor dem startDrag ein

    [die jeweilige sprite-instanz].setChildIndex(getChildAt(getChildByName(event.currentTarget.name)), 0);


    hm, wenn das jetzt in den hintergrund wandert (das weiß ich grad nicht aus dem kopf, dann nimmst du

    [die jeweilige sprit-instanz].setChildIndex(getChildAt(getChildByName(event.currentTarget.name)), ([die jeweilige sprite (oder shape, hm)-instanz].numChildren() - 1));


    anders als unten hab ich hier die abfrage nach dem aktuellen index vergessen :frown:

    natürlich ohne die eckigen klammern. und wie man sieht geb ich den dingern, die ich interaktiv benutzen mag, meist einen namen und dann greif ich bei ereignissen auf den namen zu ... naja, das ist wohl geschmackssache.

    aber ich glaub statt target sollte es currentTarget heißen (bin mir aber da wiederum nicht sicher - testen, testen, testen)

    das andere weiß ich im grunde auch, aber ich hab grad keine zeit zum tippen (sorry)
    wenn dir F1 nicht weiterhilft und sich niemand anders deiner annimmt, guck ich heute abend mal nach.

    ich glaub bei startDrag kannst du das true weglassen :-)

    Beitrag zuletzt geändert: 9.8.2009 6:00:11 von sonok
  4. das true auf false setzen, ist der centerlock, glaube ich mich recht zu erinnern und weil dein Mittelpunkt jedes bildes links oben ist, springt der zeiger dorthin, bzw. das bild nach unten rechts.

    Warum denn eigentlich Mouse Down und Mouse up?

    versuche es mal mit Release & Co.
  5. Autor dieses Themas

    freakystyle

    freakystyle hat kostenlosen Webspace.

    also bis auf das mit child index hab ich alles hinbekommen^^
    ich werds morgen aber nochmal versuchen und wenn ich es nicht schaffe nochmal hier melden xD
  6. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    milchreis schrieb:
    Warum denn eigentlich Mouse Down und Mouse up?


    hm, ist das eine stil-frage? ich hab auch so ein drag-drop-gebastelt mit DOWN/UP, das ging eigentlich

    naja, hier ist dann mal ein code, der geht ...
    // container für fotos und text, zb
    var boxen:Array = new Array(new Sprite, new Sprite);
    // die testqadrate(quadtrat, name, farbe, uswusf) --- immer zwei quatrate pro container
    var formen:Array = new Array(new Sprite,"0","0x809030", new Sprite,"0","0x809030", new Sprite,"1","0x80BB80", new Sprite,"1","0x80BB80");
    // das array "formen" durchlaufen; die boxen erhalten dabei den gleichen nummerischen namen wie die quadrate, die reingehören
    var i:int = 0;
    while (i<formen.length)
    {
    boxen[formen[i+1]].addChild(formen[i]);
    boxen[formen[i+1]].name = formen[i+1];
    formen[i].name = formen[i+1];
    formen[i].graphics.beginFill(formen[i+2], 1);
    formen[i].graphics.drawRect(10*i, 10*i, 60, 60);
    formen[i].graphics.endFill();
    formen[i].addEventListener(MouseEvent.MOUSE_DOWN, drag_start);
    formen[i].addEventListener(MouseEvent.MOUSE_UP, drag_ende);
    i = i + 3;
    }
    addChild(boxen[0]);
    addChild(boxen[1]);
    function drag_start(event:MouseEvent):void
    {
    	// die oberste ebene ist die mit dem höchsten index-wert; daher suchen wir den indexwert der box,
    	// die das geklickte quadrat entällt und setzten deren index auf den höchsten
    	setChildIndex(getChildAt(getChildIndex(getChildByName(boxen[event.currentTarget.name].name))), numChildren - 1);
    	boxen[event.currentTarget.name].startDrag();
    }
    function drag_ende(event:MouseEvent):void
    {
    	boxen[event.currentTarget.name].stopDrag();
    }



    Beitrag zuletzt geändert: 9.8.2009 5:58:51 von sonok
  7. sonok schrieb:
    milchreis schrieb:
    Warum denn eigentlich Mouse Down und Mouse up?


    hm, ist das eine stil-frage?



    Nö, eher ne normale Frage.
    Hatte noch gar nix mit den Mouseevents zu tun und stelle grad fest das es sowas wie onPress gar nicht mehr gibt.
    war dairgendwie von AS2 noch gewohnt, das es neben MouseDown noch was gibt, ist ja aber sinnlos, weil Mouse Down jetzt die Funktionalität einschließt.

    wieder was gelernt.

    Zum Thema zurück:
    Um etwas ganz in den Vordergrund zu bekommen, einfach mal addchild probieren:
    var Kreis:MovieClip = new MovieClip();
    			var Rechteck:MovieClip = new MovieClip();
    			
    			Kreis.graphics.beginFill(0xFF00FF, 1);
    			Kreis.graphics.drawCircle(300, 300, 300);
    			Kreis.graphics.endFill();
    			
    			addChild(Kreis);
    			
    			Rechteck.graphics.beginFill(0x00FF00, 1);
    			Rechteck.graphics.drawRect(100, 10, 100, 300);
    			Rechteck.graphics.endFill();
    			
    			addChild(Rechteck);
    			//addChild(Kreis);//wenn diese Zeile rauskommentiert ist, ist das Rechteck vorn, wenn sie aber ausgeführt wird, kommt der Kreis wieder in den Vordergrund



    Beitrag zuletzt geändert: 10.8.2009 1:53:22 von milchreis
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!