Artikel Tagged 'Kontext'

ActionScript: _parent und Kontrolle Rahmenbedingungen

Als "ausgelöst" ein Ereignis von einem Objekt-Kontext, der das übergeordnete Objekt, die den Umfang aller Variablen repräsentiert ist, wird das Objekt selber. Dieses Merkmal, Eigenschaft der objektorientierten Programmierung werden kann verwirrend verursachen Fehler und Bugs im Code. Darüber hinaus in bestimmten Situationen kann verhindern den Zugriff auf einige Variablen "vor" zur Verfügung.

Zunächst einmal sehen wir ein Feature von ActionScript im Zusammenhang mit Management-Kontext, die, falls enthalten, rette uns dauert ein paar Stunden unnötiger Tests. Als wir mit Grafiken oder einfach MovieClips ineinander verschachtelt zu tun haben, die Eigenschaft _parent , Problemlösungs-Kontext. Zum Beispiel, wenn der MovieClip padre_mc contiente figlio_mc anderen MovieClip und verwenden Sie den folgenden Code:

1
2
3
4
5
/ / Code in padre_mc
( ) { figlio_mc. onRelease = function () {
this ) ; // figlio_mc trace (this); / / figlio_mc
this . _parent ) ; // padre_mc trace (This. _parent); / / padre_mc
}

Risalisre den "Vater", dann ist klar und direkt.

Mit reinen Klassen, Code-only, oder die Erweiterung der MovieClip-Eigenschaft _parent steht nicht zur Verfügung und könnten die Dinge noch komplizierter! Immaginiiamo zu haben eine Klasse MyClass :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MovieClip { Klasse MyClass erstreckt MovieClip {
function MyClass () {
/ / Konstruktor
}
/ /
myMethod Funktion () {
this ) ; // myClass trace (this); / / myClass
; var zahl = 5;
; var cp = this;
....
[ un oggetto ] ; var myObject = new [ein Objekt];
( ) { myObject. onLoad = function () {
this ) ; // myObject trace (this); / / myObject
cp ) ; // myClass trace (cp); / / myClass
}
}

, ovvero il puntatore alla classe MyClass . Der Kontext MyMethod() ist natürlich, this , das ist die Zeiger auf die Klasse MyClass . . Die Variable num , zum Beispiel, hat einen Lebenszyklus innerhalb der Methode eingeschlossen MyMethod() . Es ist daher nur innerhalb der Methode sichtbar und wird am Ausgang zerstört werden. . Das Gleiche gilt für die Variable myObject , die ein Ereignis initialisiert, aber in diesem Fall onLoad . lasciandoci, apparentemente, senza il puntatore alla classe madre myClass . Wenn ausgelöst onLoad() Kontext wird myObject verlassen, scheinbar, ohne die Zeiger auf das übergeordnete Klasse myClass . , ha lo stesso contesto della variabile myObject ! Ein genauerer Blick auf den Code, den wir sehen, dass die Variable cp , in der Methode definiert myMethod() , den gleichen Kontext der Variable hat myObject ! dell'oggetto myObject in quanto condivide con esso lo stesso contesto. In der Tat wird die Variable cp (Klasse Zeiger) sichtbar sein wird innerhalb der Methode onLoad Objekt myObject da es den gleichen Kontext teilt. ha necessità di “vivere” più al lungo del previsto visto che ha “allocato” un evento (di tutto questo se ne occupa Flash a nostra “insaputa”). In der Tat das Verfahren myMethod() nicht nur, weil das Objekt freigegeben wird myObject hat das Bedürfnis, "live" über die länger als erwartet, weil es "zugeteilt" ein Ereignis (all dies ist mit Flash zu tun in unserem "unbekannt").

Beratung

Für Veranstaltungen mit Schaltflächen oder Movieclips verbunden eine gute Gewohnheit wäre, das Formular zu verwenden:

1
2
3
4
5
my_mc onRelease = myOnRelease.;
myOnRelease function () {
this ) ; // _root trace (this); / / _root
"Click me" ) ; trace ("Klick mich");
}

An die Stelle der schnelleren und sofortigen:

1
2
3
4
( ) { my_mc. onRelease = function () {
this ) ; // my_mc trace (this); / / my_mc
"Click me" ) ; trace ("Klick mich");
}

Der Vorteil der Verwendung eines externen Funktion ist es, einen neutralen Kontext und die Möglichkeit, die Funktion unabhängig von der MovieClip, die sie kontrolliert den Zugriff zu haben. Im zweiten Fall, zum Beispiel, wenn Sie zwingen wollen, dass die Ausführung des Codes an den "Klick" der MovieClip verknüpft sollte ich einen Code dieser Art verwenden:

1
; . my_mc onRelease ();

In der Praxis nenne ich die Veranstaltung als ob es ein Verfahren waren. Allerdings habe ich - in der Tat - auf die MovieClip haben my_mc . So oder so, aber ich kann führen Sie den Code direkt aufruft myOnRelease() . Offensichtlich, wie in den Beispielen, Auge in Kontexten. . Im ersten Fall wird der Kontext der myOnRelease() ist die Mutter des Objekts, wo es geschrieben steht, zum Beispiel _root . Im zweiten Fall hingegen ist der Kontext immer die MovieClip my_mc !

Erzwingen einer anderen Kontext

Wir schließen mit einer nützlichen Tricks in vielen Fällen. in grado di forzare un contesto di un metodo o funzione. Flash bietet eine Bibliothek, mx.utils mit einem Objekt Delegate können erzwingen, dass ein Zusammenhang mit einer Methode oder Funktion. Seine Verwendung ist sehr einfach:

1
2
3
4
5
6
7
8
utils . Delegate ; .. Import mx utils Delegierter;
/ /
// puntatore ad un MovieClip my_mc var, / / Zeiger auf eine MovieClip
// un bottone my_btn var, / / a-Taste
Funktion myFunction () {
this ) ; trace (this);
}
create ( my_mc , myFunction ) ; my_btn onPress = Delegate erstellt (my_mc, myFunction)..;

Die Veranstaltung onPress my_btn die Schaltfläche verweist auf eine "neue" Funktion erstellt genau mit dem Kontext my_mc. Wenn Sie auf den Button klicken my_btn, wird der Code ausgeführt in myFunction() wird als Kontext my_mc haben!

Mehr ...


Stop SOPA