| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| ------------------------- Registriert seit: Jul 2002 Ort: Zürich
Beiträge: 159
| MX:Eigenschaft einer Klasse ansprechen
Hi, ich bin komplett neu auf dem OO-Gebiet und habe hier mal ne Klasse kreiert und versuche jetzt auf die Eigenschaft eines Objektes zuzugreifen - aber es funzt nicht. Das Objekt ist als MC auf die Hauptebene 'attached' (raum), in dem ich unter anderem das Objekt 'p' mit Koordinaten gefüllt habe. Jetzt versuche ich diese Koordinaten über trace(this.raum.p[0]); anzusprechen, und es gibt mir 'undefined' aus. Bitte nicht lachen - ich glaube, ich habe da etwas Grundsätzliches nicht verstanden. Kann mir jemand einen hilfreichen Wink geben? Marpfei Variable _level0.raum = [Objekt #27, Klasse 'Poly3D'] { p:[Objekt #28, Klasse 'Array'] [ 0:[Objekt #29, Klasse 'Vertex'] { x:-5000, y:4000, z:6500, ox:-5000, oy:4000, oz:6500, sx:0, sy:0 }, 1:[Objekt #30, Klasse 'Vertex'] { x:5000, y:4000, z:6500, ox:5000, oy:4000, oz:6500, sx:0, sy:0 } |
| | |
| | #3 (permalink) |
| ------------------------- Registriert seit: Jul 2002 Ort: Zürich
Beiträge: 159
|
Tut leid - Tippfehler! Natürlich meinte ich: trace(this.raum.p[0].x); Ich findes es nur komisch. Ich habe die Objekte und kann sie mir auflisten lassen - nur ansprechen kann ich sie nicht. Habe ich da was falsch gemacht? Ist es vielleicht das x, das als reservierter Name das ganze durcheinander bringt? Aber ich habe x, y, z schon so oft verwendet, und es kam zu keinen Ungereimtheiten. Marpfei |
| | |
| | #4 (permalink) |
| Markus Raab Registriert seit: Aug 2001 Ort: Berlin Friedrichshain
Beiträge: 928
|
trace( this.raum.p[0]["x"] );
__________________ Blog | derRaab(); - Flash Platform Developer | XING | Joykey - Joystickevent to Keyevent | electronicSat - elektronische Musik | MySpace |
| | |
| | #5 (permalink) |
| ------------------------- Registriert seit: Jul 2002 Ort: Zürich
Beiträge: 159
|
Hallo der Raab, ich habe es mit deiner, trace( this.raum.p[0]["x"] ); und anderen Variationen versucht. Er gibt mir immer 'undefined' zurück. Kann ich diese Eigenschaften vielleicht anders ansprechen? Marpfei |
| | |
| | #6 (permalink) |
| nerdig working Registriert seit: Jul 2001 Ort: Hamburg
Beiträge: 5.832
|
ich denke da stimmt irgendetwas in deiner klassendefinition nicht. normalerweise kommt man mit einer derartigen syntax ja ans ziel: ActionScript:
michael Geändert von michael (06-12-2002 um 14:06 Uhr) |
| | |
| | #7 (permalink) |
| ------------------------- Registriert seit: Jul 2002 Ort: Zürich
Beiträge: 159
|
Die Klasse, die ich verwende habe ich aus einem Lehrbuch und bin dabei sie für meine Bedürfnisse umzuschreiben. Ich habe hier extern in einer as-Datei die Objekte definiert (Vertex, Poly3D) und mit der Funktion 'addVertex' schiebe ich die neuen Punkte in das Array p rein. Die Funktion ist unten angegeben. function Vertex(x,y,z) { this.x = x; this.y = y; this.z = z; this.ox = x; this.oy = y; this.oz = z; this.sx = 0; this.sy = 0; } function Poly3D(x,y,z) { this.p = new Array(); this.f = new Array(); this.xpin = x; this.ypin = y; this.zpin = z; this.scale = 100; } Poly3D.prototype.addVertex = function(x,y,z) { this.p.push( new Vertex(x,y,z)); } Diese Schleife liegt in einem MC (XML-Loader), den ich als Objekt mit #initclip in die Hauptzeitleiste 'attached' habe. for (i=-1; ++i<anzahlPunkte; ) { var pXYZ = punkte[i].split(","); _root.raum.addVertex(Number(pXYZ[0]), Number(pXYZ[1]), Number(pXYZ[2])); } Ist das nicht das selbst wie du mir gerade gezeigt hast? Marpfei |
| | |
| | #8 (permalink) |
| Trainman Registriert seit: Sep 2001 Ort: Wien, Österreich
Beiträge: 1.324
|
also ActionScript:
der fehler liegt irgendwo anders...
__________________ So much to learn and so little time. Ich liebe dieses Forum!! |
| | |
| | #9 (permalink) |
| nerdig working Registriert seit: Jul 2001 Ort: Hamburg
Beiträge: 5.832
|
hm entweder hast du ein timingproblem (trace aufgerufen bevor klasse deklariert wurde) oder ein pfad-problem duch #initclip. wenn p und dessen inhalte innerhalb von #initclip - #endinitclip erzeugt werden ist der pfad zum tracen von der hauptzeitleiste nicht mehr this.raum.p[0].x sondern this.p[0].x gruss michael |
| | |
| | #10 (permalink) |
| ------------------------- Registriert seit: Jul 2002 Ort: Zürich
Beiträge: 159
|
Also, wenn ich euch nerve, dann sagt es! (Warscheinlich bekomme ich dann eh keine Antworten mehr). Timingproblem ist es, glaube ich, keines. Ich habe hier das MC (loadXML), mit dem ich die Koordinaten aus dem XML in die Arrays p und l im _root.raum schiesse. ActionScript:
Aber den Aufruf mache ich in der Hauptzeitleiste: ActionScript:
Vor allem verstehe ich nicht, dass er mir die Klasse im Variablen-Fenster anzeigt und im Programm nicht findet? Mir geht es ja nur darum, aus der Klasse 'raum' in dem Array 'p' das erste Teil anzusprechen. Und ich habe es sogar von _root aus probiert. Er zeigt mir immer nur 'undefined'. Variable _level0.raum = [Objekt #32, Klasse 'Poly3D'] { p:[Objekt #33, Klasse 'Array'] [ 0:[Objekt #34, Klasse 'Vertex'] { x:-5000, y:4000, Auf jeden Fall Danke für Eure vielseitige Hilfe! Marpfei |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Jun 2001 Ort: www
Beiträge: 24
|
Marpfei, doch es sieht nach einem kleinen Timing-Problem aus: du rufst trace( _root.raum.p[0].x); direkt nach this.loadXML.ladeDaten("XMLRaum/ccc.xml"); auf - da sind die Daten aber noch nicht geladen, d.h. der Wert ist 'undefined'. Probiere einfach mal zum Testen das trace() in den onLoad Handler zu verschieben: ActionScript:
Im Ausgabefenster zeigt er dir das deshalb richtig an, weil, wenn du (mit 2-3 Sekunden später) nachschaust, sind die XML-Daten da und der Handler wurde aufgerufen! Nur wenn du gaaaanz schnell das Ausgabefenster öffnet würdest, könntest du auch hier in der Tat ein 'undefined' sehen ![]() hoffe es klappt. |
| | |
| | #12 (permalink) |
| ------------------------- Registriert seit: Jul 2002 Ort: Zürich
Beiträge: 159
|
Klappt! Ihr hattet wirklich recht. Es war ein Timingproblem. Mir war nur nicht klar, dass das Programm, wenn es eine Methode einer Klasse von der Hauptzeitleiste aufruft, gleich im Code weitermacht, ohne erst diese Methode vollständigt auszuführen. Mir ist das ehrlich gesagt nocht nicht ganz klar, was das Programm jetzt wirklich macht, wenn es da zwischen Ebenen, Funktionen, Klassen, Methoden und Frames hin und herspringt. Für mich ist meist das grösste Problem, herauszufinden, wo das Programm gerade den Code ausführt. Weiss vielleicht jemand eine Quelle, wo genau dieser Sachverhalt genau erklärt wird? - also zB. welcher Code zuerst ausgeführt wird, wenn in einem Programm in verschiedenen Ebenen im selben Frame Code liegt. Danke allen für die Hilfe! Marpfei |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |