globale variabeln

Öli

Mitglied
hei Leutz,
wie erstelle ich ihn flash mx globale Variabeln?
etwa so?:

_gloabal.var i;

und wie rufe ich sie ab?
Werden sie wie ganz normale Vars behandelt?

Danke schon mal im voraus!

Greetz
Öli
 
¡hola!

ja du erstellst sie mit _global.variablen_name = wert und kannst sie dann von überall mit variablen_name abrufen, also ohne das "_global" davor zu setzen..

PHP:
_global.variable = "ich bin global!"

variable2 = variable


*sancho*
 
Du ermittelst dann nicht einfach mit "variablenname" den Inhalt der globalen Variable, nur das Scoping wird damit um ein Kettenglied erweitert, wenn ich mich recht entsinne. :)

Geist
 
Bedeutet folgendes:

Der ActionScript-Interpreter sucht normalerweise nach einer Variablen, indem er eine bestimmte Kette (chain) von Objekten nach dortiger Existenz dieser Variablen durchschaut.

Dabei wird von der Sache her zunächst das betreffende Objekt selbst geprüft, ob es als eine Eigenschaft die besagte Variable beinhaltet, danach werden evtl. diverse andere Objekte gecheckt.

In einigen Fällen gelten Variablen nur in einem Objekt, in anderen Fällen haben sie ihren Gültigkeitsbereich auch außerhalb des Objektes.
Diese Eigenschaft, der Gültigkeitesbereich, ist das scoping von Variablen.

Spielt vor allem eine Rolle innerhalb von Funktionen, verschachtelten Funktionen und auch Objekten.

Beispielsweise setzt du mit der Einführung der globalen Variable "test" mit
PHP:
_global.test = "global!";
einen globalen Gültigkeitsbereich für die Variabe fest.
Du kannst dadurch also von überall auf die Variable zugreifen, auch innerhalb eines beliebigen MovieClips eben.

Besitzt dieser MovieClip aber eine eigene Eigenschaft in Form der Variablen "test", dann liegt der Gültigkeitsbereich der objekteigenen Variable über dem der globalen Variable und folgendes Script bspw. wird dir im Ausgabefenster eben "objekt!" liefern und nicht "global!".
PHP:
_global.test = "test";

a = this.createEmptyMovieClip("testMC", 1);
a.test = "objekt!";

trace(a.test);
Diesen Weg des Interpreters, den er wählt, um sich durch diverse Gültigkeitsbereiche zu hangeln, nennt man den scope-chain.

Eine globale Variable setzen heißt also nicht zwangsläufig, dass die Variable überall den gleichen Wert besitzt, sondern dass für den Fall, dass der Interpreter nach langer vergeblicher Suche auch schlußendlich auf das _global-Objekt trifft, er dort mindestens immer die benötigte Variable findet, sollte sie nicht unterwegs auf der Suche im scope-chain gefunden worden sein. :)

hth,
Geist
 
Boahhh!! Vielen DAnk für diess ausführlich Erläuterung! *respect*
(ich weiß, das Danke bring dir nicht viel;))

wie kann ich dann z.B. per buttonclick die globale Variable verändern?

so geht es ja nicht:

_global.i = 8;

bu1.onRelease = function() {
i= 5;
};


und noch eine frage:
wie bekommen ich den Ausdruck von "trace" angezeigt? (sorry, für noob frage)

PS: habt bitte Geduld mit mir *HundeBettelBlick*

mfG
Öli
 
Original geschrieben von Geist
Bedeutet folgendes:

Der ActionScript-Interpreter sucht normalerweise nach einer Variablen, indem er eine bestimmte Kette (chain) von Objekten nach dortiger Existenz dieser Variablen durchschaut.

Dabei wird von der Sache her zunächst das betreffende Objekt selbst geprüft, ob es als eine Eigenschaft die besagte Variable beinhaltet, danach werden evtl. diverse andere Objekte gecheckt.

In einigen Fällen gelten Variablen nur in einem Objekt, in anderen Fällen haben sie ihren Gültigkeitsbereich auch außerhalb des Objektes.
Diese Eigenschaft, der Gültigkeitesbereich, ist das scoping von Variablen.

Spielt vor allem eine Rolle innerhalb von Funktionen, verschachtelten Funktionen und auch Objekten.

Beispielsweise setzt du mit der Einführung der globalen Variable "test" mit
PHP:
_global.test = "global!";

einen globalen Gültigkeitsbereich für die Variabe fest.
Du kannst dadurch also von überall auf die Variable zugreifen, auch innerhalb eines beliebigen MovieClips eben.

Besitzt dieser MovieClip aber eine eigene Eigenschaft in Form der Variablen "test", dann liegt der Gültigkeitsbereich der objekteigenen Variable über dem der globalen Variable und folgendes Script bspw. wird dir im Ausgabefenster eben "objekt!" liefern und nicht "global!".
PHP:
_global.test = "test";

a = this.createEmptyMovieClip("testMC", 1);
a.test = "objekt!";

trace(a.test);

Diesen Weg des Interpreters, den er wählt, um sich durch diverse Gültigkeitsbereiche zu hangeln, nennt man den scope-chain.

Eine globale Variable setzen heißt also nicht zwangsläufig, dass die Variable überall den gleichen Wert besitzt, sondern dass für den Fall, dass der Interpreter nach langer vergeblicher Suche auch schlußendlich auf das _global-Objekt trifft, er dort mindestens immer die benötigte Variable findet, sollte sie nicht unterwegs auf der Suche im scope-chain gefunden worden sein. :)

hth,
Geist

meinst du mit scoping dasselbe wie in z.b. in c++ der scope operator "::" ?
 
@Öli:
PHP:
bu1.onRelease = function() { 
    _global.i = 5; 
}
sollte doch imho gehen!?

Dein Script
PHP:
bu1.onRelease = function() { 
    i = 5; 
}
definiert die Variable i ja auf _level0, nicht im global-Objekt und auch nicht im Objekt selber.

Die Meldung von der trace()-Methode bekommst du eigentlich automatisch im Ausgabefenster angezeigt, klappt aber nur in der Flash-Entwicklungsumgebung, nicht im eingebetteten Film oder im Stand-alone-Player.

Ansonsten einfach mal das Ausgabe-Panel öffnen oder aktivieren.

@nixkapier:

Was *ich* mit scoping meine, steht so im Posting, was C++ darunter, bzw. unter dem scope-Operator versteht, kann ich dir leider nicht sagen. :)

Geist
 

Neue Beiträge

Zurück