Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-07-2010, 14:20   #1 (permalink)
AS Programmer
 
Benutzerbild von Mattcheck
 
Registriert seit: Dec 2009
Beiträge: 36
EventListener auf Array (target.name) geht nicht.

Hi,

ich habe ein Problem und zwar habe ich eine eigene Klasse erstellt, die einen MC erstellt.
Ich erstelle durch eine schleife beispielsweise 10 mal ein Objekt von der Klasse mit unterschiedlichen Koordinaten. Also sieht man 10 MC auf der Bühne. Nun wollte ich in der Schleife auf jedes dieser Objekte einen EventListener hinzufügen mit Einem MouseEvent.
Das Event ruft dann eine Funktion auf die einfach nur den Namen von dem Objekt ausgeben soll das gedrückt wurde. Angenommen das Array heißt test und es wurde der 2. MC gedrückt wäre der trace "test[2]"

bei mit kommen dann wenn ich über "evt.target.name" immer irgendwelche instancen z.b. instance 23
über currentTarget oder currentTarget.name geht es auch nicht und über this geht es auch nicht. Geht das Allgemein nicht oder muss man das anders machen?


Ein kleiner Code-Auszug mit der Schleife und der Test - Funktion.

PHP-Code:
private function completeXML(e:Event):void {
homeXML = new XML(loader.data);
homeXML.ignoreWhitespace true;
abc = new Array;
            
id 1;
for (var 
a:int = (homeXML.eintrag.length()-1); > (-1); a--) {
    
abc[id] = new News(homeXML.eintrag[a].titlehomeXML.eintrag[a].date);
    
abc[id].40*(id-1)+190;
    
abc[id].5;
    
abc[id].addEventListener(MouseEvent.CLICKtest);
    
addChild(abc[id]);
    
id++
    }
}
private function 
test(e:MouseEvent):void {
    
trace(e.target);                    //trace: [object MovieClip]
    
trace(e.target.name);            //trace: instance47
    
trace(e.currentTarget);          //trace: [object News]
    
trace(e.currentTarget.name);  //trace: instance42
    
trace(this);                          //trace: [object Main]

Ich habe keine Ahnung wie man einen trace wie z.B. "abc[3]" hinbekommt?
Mattcheck ist offline   Mit Zitat antworten
Alt 30-07-2010, 14:50   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Weiß nicht, ob ich dich richtig verstehe. So hier?
PHP-Code:
//In der Schleife:
abc[id].num id
//
//In der Funktion:
trace(abc[e.target.num]) 
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 30-07-2010, 15:05   #3 (permalink)
AS Programmer
 
Benutzerbild von Mattcheck
 
Registriert seit: Dec 2009
Beiträge: 36
kann man da einfach eine Eigenschaft anfügen?

also z.b Num?
Wusste nicht das das geht...
Mattcheck ist offline   Mit Zitat antworten
Alt 30-07-2010, 17:48   #4 (permalink)
Neuer User
 
Registriert seit: Oct 2009
Ort: Bremen
Beiträge: 147
Wenn du die Name-Eigenschaft des Objekts beim Erstellen nicht setzt, wird diese von Flash automatisch befüllt.

Die target Eigenschaft eines MouseEvents gibt dir das Ziel zurück, welches das Event ausgelöst hat. Und die currentTarget-Eigenschaft das Objekt an das der EventListener gehangen wurde. (vorrausgesetzt das Event bubbled)
DerTobi ist offline   Mit Zitat antworten
Alt 30-07-2010, 19:02   #5 (permalink)
AS Programmer
 
Benutzerbild von Mattcheck
 
Registriert seit: Dec 2009
Beiträge: 36
Aus was für einen Typ besteht denn die name Eigenschaft?
String?

PHP-Code:
private*function*completeXML(e:Event):void*{ 
homeXML*=*new*XML(loader.data); 
homeXML.ignoreWhitespace*=*true
abc*=*new*Array; 
************ 
id*=*1
for*(var*
a:int*=*(homeXML.eintrag.length()-1);*a*>*(-1);*a--)*{ 
****
abc[id]*=*new*News(homeXML.eintrag[a].title,*homeXML.eintrag[a].date); 
****
abc[id].y*=*40*(id-1)+190
****
abc[id].x*=*5
****
abc[id].name*=*"abc[" id "]"
****abc[id].addEventListener(MouseEvent.CLICK,*test); 
****
addChild(abc[id]); 
****
id++ 
****} 

Und jetzt würde der trace(e.target.name) Befehl z.B. "abc[2]" anzeigen?

Stimmt das? Kann das gerade nicht testen.
Mattcheck ist offline   Mit Zitat antworten
Alt 30-07-2010, 19:17   #6 (permalink)
Neuer User
 
Registriert seit: Oct 2009
Ort: Bremen
Beiträge: 147
Das ist ein String ja.
Und ja, "abc[2]" wäre dann die Ausgabe.
DerTobi ist offline   Mit Zitat antworten
Alt 30-07-2010, 19:36   #7 (permalink)
AS Programmer
 
Benutzerbild von Mattcheck
 
Registriert seit: Dec 2009
Beiträge: 36
Ok, vielen Dank für die schnellen Antworten
Mattcheck ist offline   Mit Zitat antworten
Alt 30-07-2010, 20:50   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Nur mal so als Anmerkung, du kannst die Eignschaften von Klassen relativ einfach in der Hilfe nachschlagen. Ausserdem, und das ist gerade nur eine Anmerkung, würde ich den Code in mehr Methoden auslagern und mit stark typisierten lokalen Variablen zu arbeiten. Das hat den Vorteil, dass dir gute IDEs und der Compiler besser zu arbeiten können. Ausserdem macht es den Code lesbarer.
Code:
// Avoid runtime errors.
var news:Array = [];

private function completeXML(e:Event):void
{ 
  homeXML = new XML(loader.data); 
  homeXML.ignoreWhitespace = true;
             
  var id:int, length:int = homeXML.eintrag.length() - 1;

  for (var a:int = length; a > -1; a--)
  { 
    // Komplexes E4X will man nicht unbedingt debuggen
    var title:String = homeXML.eintrag[a].title;
    var date:String = homeXML.eintrag[a].date;

    // Einfacher, lesbarer Code.
    var news:News = new News(title, date);
    news.addEventListener(MouseEvent.CLICK, test); 
    news.x = 5;
    news.y = 40*(id-1)+190; 
    this.news[id] = addChild(news);
    id++; 
  } 
} 

private function test(e:MouseEvent):void
{ 
    // Hier auch am besten eine stark typisierten lokale Variable anlegen.
    var movieClip:MovieClip = MovieClip(event.target);

    trace(movieClip); //trace: [object MovieClip] 
    trace(movieClip.name); //trace: instance47 
    trace(e.currentTarget); //trace: [object News] 
    trace(movieClip.name);  //trace: instance42 
    trace(this); //trace: [object Main] 
}
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, eventlistener, target, target.name

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
EventListener, target & currentTarget florianosch ActionScript 3 6 20-01-2010 14:35
eventListener an array xact21 ActionScript 3 7 23-10-2009 09:45
eigene Eventlistener für einzelne Array Objekte? Steril707 ActionScript 3 2 27-11-2007 13:15
end(Array) geht nicht TrailFox Server-Seite allgemein 3 28-10-2007 17:03
target geht nicht ! Abzocker02 PHP und MySQL 7 24-03-2004 12:04


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele