[MX 2004] Klassen mit MC-Methoden?

luke_the_duke

Erfahrenes Mitglied
Hallo zusammen!

Ich habe eine kleine Frage:

Ich arbeite an einer Klasse, die einen Menü-Eintrag darstellen soll. Kann man, wenn man der Klasse die Daten dafür mitgibt, eine Methode integrieren, die eine Form zeichnet? Mit lineTo usw. geht das ja nicht, weil das Methoden der MC-Klasse sind.

Gruss
 
Hi,

na ja, wenn Du irgendwas zeichnen willst, musst Du jedenfalls ein "Objekt" haben, auf das Du zeichnest: Entweder übergibst Du Deiner Klasse (im Konstruktor oder mit einer Methode) dafür einen existierenden MovieClip, oder Du erstellst Dir mit createEmptyMovieClip einen neuen... allerdings brauchst Du auch dann einen Container dafür (aber Du kannst ihn ja erstmal mit getNextHighestDepth unsichtbar auf _root erstellen und hervorholen, wenn Du ihn brauchst. ;) ).

Fragen wir mal so: In was für einer Umgebung ´gedenkst Du diese Klasse einzusetzen, wenn weit und breit keine MovieClips existieren?

Gruß

P.S.: ausserdem müsste es möglich sein, eine eigene Klasse von MovieClip abzuleiten (muss ich mal testen) und/oder eine Klasse mit einem MC zu verbinden (siehe unter registerClass).
.
 
Hallo,

der einzige Grund für das vorläufige Nichtvorhandensein von MC's (und die etwas allgemeine Fragestellung) ist die Tatsache, dass ich nicht am scripten, sondern erst am konzipieren bin. Das Ziel ist eine Klasse zu generieren, die einen Menüeintrag darstellt. Ich habe mir überlegt, ob ich in der Klasse eine Funktion implementieren soll, die den Eintrag aufgrund von Eigenschaften (einen Button, natürlich) gleich zeichnet, ohne dass ich das irgendwie vom Film aus mache. Man gibt der Klasse beispielsweise die Farben für Linien, Fills usw., die Masse und die Position des Buttons mit und sie generiert dann einen Button. Das kann man natürlich eigentlich alles schon mit der MC-Klasse, aber ich möchte eben auch Vererbungen für Untermenüs, Funktionen für Animationen und Events usw. mit integrieren.

Eigentlich ist dein Vorschlag, die MC-Klasse zu modifizieren ein sehr sinnvoller, werde das mal prüfen. Aber wie gesagt, ich bin erst am Konzept und möchte eben etwas kreieren, das ich dann nicht nur in einem spezifischen Fall einsetzen kann.

Gruss

EDIT:

Mein Gott, all die Fehler :rolleyes:
 
Zuletzt bearbeitet:
Hi,

ja, entweder Du leitest ab, oder Du trennst die Klasse (sprich: den Datenteil) völlig vom MC und speicherst nur alle nötigen Informationen (auch Koordinaten usw.). Zeichnen lassen kannst Du den Button dann z.B. mit einer paint-Methode, die einen MC übergeben bekommt... wie so eine Klasse aufgebaut werden sollte hängt m.E. doch stark vom Einsatzzweck ab - und so wie Du es beschrieben hast, wäre es wohl in der Tat am sinnvollsten, einen MovieClip als Basis zu verwenden.

Gruß
.
 
Hallo,

noch eine Frage:

Wie kann man einer Klassenfunktion eine beliebige Anzahl von einem Wert übermitteln, z.B. x-beliebig viele Instanznamen, die dann der Klasse zugeordnet werden?

Gruss
 
Hi,

Zwei Möglichkeiten fallen mir spontan ein:

- Array variabler Länge übergeben:
PHP:
function test(variable:Array) {
    for (var i=0; i<variable.length; i++) {
        trace(variable[i]);
    }
}

- Objekt mit beliebiger Parameteranzahl übergeben:
PHP:
function test(variable:Object) {
    for (var i in variable) {
        trace(i + " :: " + variable[i]);
    }
}

Gruß
.
 
Hallo,

danke für deine Antworten, vor allem die Lösung mit dem übergebenen Array war ein toller Denkansatz. Und schon die nächste Frage:

Kann man eigentlich den Namen einer Klasseninstanz (AS 2.0) irgendwie abrufen, bzw. als Eigenschaft einbauen, wenn ich also codiere:

PHP:
_root.test = new selbsterstellte_Klasse ();
//z.B.
trace (_root.test._name); //gibt aus: test

Gruss
 
Hmm, muss ich gestehen: Ich bin im Moment überfragt. Theroretisch müsstest Du eine eigene Membervariable "_name" setzen, die Ihren Wert beim Aufruf des Konstruktors erhält (grade getestet: Auch wenn Du von MovieClip ableitest (die Klasse kennt ja "_name"), ist die "_name"-Eigenschaft "undefined" (egal, ob Du den Standardkonstruktor überschreibst oder nicht). Was ich bislang nicht herausfinden konnte: Wie ich im Konstruktur feststellen kann, welcher Variable das neue Objekt zugewiesen wird. :confused:

... aber ich bleibe dran! ;)

Gruß
.
 
Hallo,

auch ich war nicht untätig und habe folgende Erkenntnisse gewonnen:

Die ganze _name-Geschichte ist, in Bezug auf den Namen der Konstruktor-Variable bzw. den Instanz-Namen eigentlich vor allem dann praktisch, wenns ums Testen bzw. das Ausgeben von Objekt-Namen geht. Alles andere kann man aber dann doch eigentlich meist mit einer zugeordneten _name-Eigenschaft bewältigen. Ansonsten vergleicht Flash sehr wohl die Instanznamen, auch wenn wir bei einem trace-Befehl immer nur z.B.
[object Object] bekommen, gilt:

PHP:
_root.test = new selbsterstellte_Klasse();
_root.test2 = new selbsterstellte_Klasse();
if (_root.test2 == _root.test) {
   //Operation, die NIE ausgeführt wird
}

In meinem Fall hat das schon mal sehr geholfen. Was meinst du?

Gruss
 
if (_root.test2 == _root.test) {
Flash vergleicht keinesfalls die Instanznamen sondern vielmehr die Objekte ansich...

Ich verwende die _name-Eigenschaft meistens, um einem Elternclip mitzuteilen, auf welchen Subclip ein Ereignis ausgelöst wurde (z.B. bei vielen Buttons)... das lässt sich ohne Weiteres auch mit einer zugeordneten Eigenschaft erledigen:
PHP:
var bla = new meineKlasse();
bla.setName("bla");

Gruß
.
 

Neue Beiträge

Zurück