Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-02-2011, 15:05   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 11
Drag/Drop mit Objekten aus Array

Hallo,
ich habe momentan ein Problem mit Objekten aus einem Array und hoffe ihr könnt mir helfen.
Ich möchte die Objekte aus einem Array per Drag/Drop verschieben können. Allerdings ist wichtig um welches Objekte innerhalb des Arrays es sich handelt, also der aktuelle Ort eines jeden Objektes ist wichtig.


Bisher sieht mein Code für das Drag/Drop folgendermaßen aus:

private function viereckeF (e:TimerEvent):void {

for (var i:Number=0; i<eckArray.length; i++){

(eckArray[i] as MovieClip).buttonMode = true;
(eckArray[i] as MovieClip).addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
(eckArray[i] as MovieClip).addEventListener(MouseEvent.MOUSE_UP, stopDragging);

function startDragging(event:MouseEvent):void
{ offsetX = event.stageX - (eckArray[i] as MovieClip).x;
offsetY = event.stageY - (eckArray[i] as MovieClip).y;
stage.addEventListener(MouseEvent.MOUSE_MOVE, dragObject);
}

function stopDragging(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, dragObject);
}

function dragObject(event:MouseEvent):void
{
(eckArray[i] as MovieClip).x = event.stageX - offsetX;
(eckArray[i] as MovieClip).y = event.stageY - offsetY;
event.updateAfterEvent();
}
}
}



Dies funktioniert aber leider nicht und es kommt wenn ich ein Objekt anklicke zu folgender Fehlermeldung:TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
at MethodInfo-356()
Wäre echt super wenn mir jemand einen Tipp geben könnte.
Vielen Dank schonmal!

Geändert von Louve (21-02-2011 um 15:06 Uhr)
Louve ist offline   Mit Zitat antworten
Alt 21-02-2011, 15:32   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Hallo und willkommen im FlashForum!
  • Wie wird viereckeF aufgerufen? Wenn das wirklich ein Timer-Event-Listener ist, setzt Du die Listener permanent neu!

  • Funktionen sollten nicht in anderen Funktionen und erst recht nicht in for-Schleifen deklariert werden.

  • Die Variable i enthält in den Unterfunktionen nicht mehr den erwarteten Wert.

  • Statt permanent ein Array-Element zu casten, sollte man mit einer lokalen Variablen vom gewünschten Typ arbeiten.

Hier mal Dein entsprechend korrigierter Code:
PHP-Code:
var objectToDrag:DisplayObject;
var 
offsetX:Number;
var 
offsetY:Number;

private function 
viereckeF (e:TimerEvent):void {
    for (var 
i:Number=0i<eckArray.lengthi++){
        var 
mc:MovieClip eckArray[i] as MovieClip;
        
mc.buttonMode true;
        
mc.addEventListener(MouseEvent.MOUSE_DOWNstartDragging);
        
mc.addEventListener(MouseEvent.MOUSE_UPstopDragging);
    }
}

private function 
startDragging(event:MouseEvent):void {
    
objectToDrag event.currentTarget as DisplayObject;
    
    
offsetX event.stageX objectToDrag.x;
    
offsetY event.stageY objectToDrag.y;
    
stage.addEventListener(MouseEvent.MOUSE_MOVEdragObject);
}

private function 
stopDragging(event:MouseEvent):void {
    
stage.removeEventListener(MouseEvent.MOUSE_MOVEdragObject);
}

private function 
dragObject(event:MouseEvent):void {
    
objectToDrag.event.stageX offsetX;
    
objectToDrag.event.stageY offsetY;
    
event.updateAfterEvent();

P.S.: Wenn Du Deinen Code als [PHP] markierst, ist er besser lesbar!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (21-02-2011 um 15:33 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 21-02-2011, 15:56   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2010
Beiträge: 11
Hallo Martin,
erstmal vielen Dank! Jetzt funktioniert es super

Ja ich rufe die Funktion wirklich mit einem Timer auf das ist aber bisher eher provisorisch. Eigentlich möchte ich sie in eine Funktion setzten, welche nur bei Aktualisierungsbedarf aufgerufen wird um für neue Objekte Listener zu erstellen. Diese Funktion hab ich bisher nur noch nicht erstellt.

Vielen Dank auch für die anderen Tipps!
Louve ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS3] Drag Drop Array ZaraUkulele Flash Einsteiger 4 23-06-2009 13:24
drag & drop mit mehreren objekten pierreroussel Flash Einsteiger 9 07-11-2006 16:56
drag drop mc aus array problem Steffus ActionScript 2 2 21-08-2006 14:25
Drag and Drop durch verschiedene MCs leider nur Press Drag & press Drop MF_ ActionScript 1 5 12-07-2004 11:11
drag & drop spiel mit array Big Ben ActionScript 1 1 10-08-2001 09:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele