Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-01-2005, 17:20   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zell am See
Beiträge: 62
Methode einer Klasse aus anderer Klasse aufrufen

Schönen guten Abend,

Mein Problem besteht darin, dass ich eine Funktion einer Klasse aus einer anderen Funktion einer anderen Klasse aufrufen möchte. Da meine Daten aus einer XML Datei kommen und den Rahmen hier sprengen würden, habe ich untenstehend nur die Struktur dargestellt.

PHP-Code:

function meineKlasse () {}

meineKlasse.prototype.ausgeben = function () {

 for (var 
i=0i<5i++) {
  
   var 
knopf "knopf"+i;
   
knopf = new schaltknopf(i);
   
knopf.werteausgeben();
   
knopf.darstellen();

   var 
darstellung "darstellung"+i;
   
darstellung = new karte(i);
   
darstellung.werteausgeben();
};

// Klasse schaltknopf

function schaltknopf(i) {
 
this.id pid;
}

// Funktion werteausgeben

schaltknopf.prototype.werteausgeben = function () {
 
trace("ID: "+this.id);
};

// Funktion darstellen

schaltknopf.prototype.darstellen = function () {
 
_root.attachMovie("knopf","knopf"+this.id,this.id);

 var 
darstellung "darstellung"+this.id;
 
 
_root["knopf"+this.id].onRelease = function () {
      
darstellung.darstellen();
 }
};

// Klasse karte

function karte (pid) {
 
this.id pid;
}

// Funktion werteausgeben

karte.prototype.werteausgeben = function () {
 
trace("ID-Karte: "+this.id);
};

// Funktion darstellen

karte.prototype.darstellen = function () {
 
_root.attachMovie("karte","karte"+this.id,this.id+1000);
};

// Aufruf aus einem Frame im Film

meinTest = new meineKlasse();
meinTest.ausgeben(); 
Die Funktionen werteausgeben funktionieren einwandfrei, diese werden ja aus der Hauptklasse aufgerufen. Die Funktion darstellen der Knopf Klasse funktioniert ebenfalls. Nur der Aufruf der darstellen Funktion aus der Klasse karte geht nicht. Wieso?

Danke für die Hilfe!
Chris M. ist offline   Mit Zitat antworten
Alt 04-01-2005, 17:46   #2 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
PHP-Code:
// so besser nicht:
var darstellung "darstellung"+i;
darstellung = new karte(i);
darstellung.werteausgeben();
//
// sondern so:
var this["darstellung"+i] = new karte(i);
d.werteausgeben(); 
PHP-Code:
_root.attachMovie("knopf""knopf"+this.idthis.id);
var 
darstellung "darstellung"+this.id;
_root["knopf"+this.id].onRelease = function() {
    
darstellung.darstellen();
};
//
//
// so sollte es gehen:
var mc  _root.attachMovie("knopf""knopf"+this.idthis.id);
mc.id this.id;
mc.onRelease = function() {
    
_root["darstellung"+this.id].darstellen();
}; 

vielleicht hilft dir das ja
zerlettino ist offline   Mit Zitat antworten
Alt 04-01-2005, 19:41   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zell am See
Beiträge: 62
Danke für die Antwort. Leider hat das mein Problem noch nicht gelöst.

Es scheint so als könnte die Funktion _root["darstellung"+this.id].darstellen(); nicht aufgerufen werden. Ich verstehe auch das _root vor dem Aufruf nicht.
Habe auch schon versucht das _root wegzulassen, auch ohne erfolg.

Was kann hier noch falsch sein?
Chris M. ist offline   Mit Zitat antworten
Alt 05-01-2005, 09:33   #4 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
PHP-Code:
function meineKlasse() {
}
meineKlasse.prototype.ausgeben = function() {
        for (var 
0i<5i++) {
                var 
darstellung this["darstellung"+i]=new karte(i);
                
darstellung.werteausgeben();
                
darstellung.darstellen();
        }
};
//---------------------------------------------------------
// Klasse karte
function karte(pid) {
        
this.id pid;
}
// Funktion werteausgeben
karte.prototype.werteausgeben = function() {
        
trace("ID-Karte: "+this.id);
};
// Funktion darstellen
karte.prototype.darstellen = function() {
        
trace("darstellen");
        
_root.attachMovie("karte""karte"+this.idthis.id+1000);
};
//---------------------------------------------------------
// Aufruf aus einem Frame im Film
meinTest = new meineKlasse();
meinTest.ausgeben(); 
ich habs mal fürs debuggen vereinfacht. also so wird bei mir die methode darstellen der karten klasse erfolgreich aufgerufen.

grüße
zerlettino ist offline   Mit Zitat antworten
Alt 05-01-2005, 12:00   #5 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Zell am See
Beiträge: 62
Soweit funktioniert es bei mir ja auch. Nur das du in deinem Script die Klasse knopf noch nicht eingebunden hast.

Du rufst darstellung.darstellen() direkt aus meineKlasse.ausgeben() auf. Bei mir wird darstellung.darstellen() jedoch erst aus knopf.darstellen() aufgerufen.
Hier ist der Unterschied. Soweit geht es bei mir ja auch noch, aber was ist mit dem Aufruf aus der nächsten Klassen Funktion?

Danke für die Hilfe, vielleicht hast du ja noch eine Idee.
Chris M. ist offline   Mit Zitat antworten
Alt 05-01-2005, 15:04   #6 (permalink)
faulancer
 
Benutzerbild von zerlettino
 
Registriert seit: Feb 2003
Beiträge: 281
PHP-Code:
// check mal so:
//
function meineKlasse() {
}
meineKlasse.prototype.ausgeben = function() {
    for (var 
0i<5i++) {
        var 
darstellung this["darstellung"+i]=new karte(i);
        var 
knopf this["knopf"+i]=new schaltknopf(i);
        
knopf.darstellen(this);
    }
};
// Klasse schaltknopf
function schaltknopf(i) {
    
this.id i;
}
// Funktion darstellen
schaltknopf.prototype.darstellen = function(referenz) {
    var 
knopf _root.attachMovie("knopf_mc""knopf"+this.idthis.id);
    
knopf.darstellung referenz["darstellung"+this.id];
    
knopf._x 30*this.id;
    
knopf.onRelease = function() {
        
this.darstellung.darstellen();
    };
};
// Klasse karte
function karte(i) {
    
this.id i;
}
// Funktion darstellen
karte.prototype.darstellen = function() {
    
trace("darstellen");
    
//_root.attachMovie("karte", "karte"+this.id, this.id+1000);
};
// Aufruf aus einem Frame im Film
meinTest = new meineKlasse();
meinTest.ausgeben(); 
das problem lag wohl darin, dass die buttons initialisiert wurden bevor überhaupt die karten objekte existierten- außerdem stimmte die referenz zum jeweiligen karten objekt nicht.

grüße
zerlettino 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele