Zugriff auf Objekt

jenno

Erfahrenes Mitglied
Folgende Situation:

Ich habe eine Klasse WatIsWat. Die Aufgabe der Klasse ist es, für Buttons aus meinem Film bestimmte Aktionen auszuführen, so soll zum Beispiel bei einem Mouseover der Button seinen Alpha-Wert verändern, beim MousePressed ein Text erscheinen, etc.

All diese Aktionen sollen durch eine Klassenmethode toDo ausgeführt werden. In der Methode toDo kommt aber wieder eine Funktion, nämlich das was bei onPress getan werden soll. Innerhalb dieser Funktion brauche ich aber auch Zugriff auf meine Instanz der Klasse. "this" ist nämlich jetzt nicht mehr diese Klasseninstanz, sondern die Buttoninstanz. Meine Frage ist jetzt: wie kann ich meine Klasseninstanz ansprechen?

PHP:
....
function toDo(bt:Button, mc:MovieClip):Void {
...
		//MousePressed
		bt.onPress = function() {
			mc.createTextField("_txt", 1, mc._xmouse+20, mc._ymouse, 130, 100);
//Das folgende funktioniert nicht, da this in dem Falle nicht mehr mein Objekt von der Klasse ist, sondern der Button selber, wie kann ich auf mein Objekt der Klasse zugreifen?
			mc._txt.text = this.getMsg();
		}
}
 
Hallo,

ist der Zweck deiner Klasse für jeden Button ein individuelles Verhaltenschema zu erstellen, oder möchtest du eine Klasse kreieren, die allen Buttons dasselbe Verhalten zuordnet?

Bei Fall 1 empfehle ich dir, die benötigten Variablen im Button zu speichern, bevor du den Event definierst,z.B. wie folgt:

PHP:
function toDo(bt:Button, mc:MovieClip):Void {
        //MousePressed
        bt.Inhalt = this.getMsg();
        bt.onPress = function() {
            mc.createTextField("_txt", 1, mc._xmouse+20, mc._ymouse, 130, 100);
            mc._txt.text = this.Inhalt;
        }
}

Bei Fall 2 kannst du dir auch überlegen, eine statische Funktion zu kreieren, die nur über die Klasse selbst aufgerufen werden kann und nicht über eventuelle Instanzen der Klasse, z.B.:

PHP:
static function getMsg () {
    die Funktionen hier...
}

Die FUnktion wird nun folgendermassen aufgerufen:
PHP:
WatIsWat.getMsg();
bzw.
PHP:
function toDo(bt:Button, mc:MovieClip):Void {
        //MousePressed
        bt.onPress = function() {
            mc.createTextField("_txt", 1, mc._xmouse+20, mc._ymouse, 130, 100);
            mc._txt.text = 
WatIsWat.getMsg();;
        }
}

Gruss
 
Was würde ich nur ohne Dich tun?

Ich habe mich für Variante 1 entschieden und das funktioniert prima.

Danke!
 
Zuletzt bearbeitet:
Nur (herrje, stell ich mich jetzt vollkommen blöde an?), die Eigenschaft Inhalt gibts natürlich nicht von meinem Button!? Wie kann ich die denn dazuzaubern?
 
Hab Fall 1 jetzt so verändert:

PHP:
function toDo(bt:Button, mc:MovieClip):Void {
        //MousePressed
        Button.prototype.Inhalt = this.getMsg();
        bt.onPress = function() {
            mc.createTextField("_txt", 1, mc._xmouse+20, mc._ymouse, 130, 100);
            mc._txt.text = this.Inhalt;
        }
}

Nur verhält sich das so wie im Fall 2. Der text ist für alle Buttons immer gleich. Aber genau das will ich nicht, der Text soll für alle Buttons ein anderer sein.
 
Hallo,

Du verwendest anscheinend Buttons der Button-Klasse...

Grundsätzlich kann man bei der MovieClip-Klasse x-beliebig viele Eigenschaften dazufügen, ohne dass das dabei die Grundstruktur irgendwie tangiert. Das gilt auch für die von Flash vorgefertigten Button-Symbole, obwohl ich persönlich aus Gründen der Flexibilität lieber darauf verzichte.

Die prototype-Funktion ist hier sicher fehl am Platz, wie du schon selbst gemerkt hast.Ich habe soeben eine solche Methode in einer meiner Klassen angewandt und verstehe eigentlich nicht, warum das nicht funktionieren soll...


Am Besten postest du mal die as, dann schau ich mir das mal an.

Gruss

EDIT:
Hab den Fehler! Du übergibst den Pfad des Ziel-MC's zwar an die Klassen-Funktion, dasselbe musst du jedoch mit dem Button tun:

PHP:
function toDo(bt:Button, mc:MovieClip):Void {
        //MousePressed
        bt.ZielMC = mc;
        bt.Inhalt = this.getMsg();
        bt.onPress = function() {
            this.ZielMC.createTextField("_txt", 1, this.ZielMC._xmouse+20, this.ZielMC._ymouse, 130, 100);
            this.ZielMC._txt.text = this.Inhalt;
        }
}
 
Zuletzt bearbeitet:
Ich hab jetzt ne Lösung:

PHP:
function toDo(bt:Button, mc:MovieClip):Void {
        //MousePressed
        var me:WatIsWat = this;
        bt.onPress = function() {
            mc.createTextField("_txt", 1, mc._xmouse+20, mc._ymouse, 130, 100);
            mc._txt.text = me.getMsg();
        }
}
 

Neue Beiträge

Zurück