ActionScript: contextos _parent y control

Cuando se "activa", un evento de un contexto del objeto, que es el objeto principal que representa el alcance de todas las variables, se convierte en el objeto en sí mismo. Esta característica, típica de la programación orientada a objetos, puede ser desorientador y errores que causan errores en el código. Además, en ciertas situaciones, puede impedir el acceso a algunas de las variables "antes de" disponible.

En primer lugar vemos una característica de ActionScript relacionados con la gestión de contexto que, de incluirse, nos va a salvar un par de horas de pruebas innecesarias. Cuando tenemos que hacer con los gráficos o simplemente un anidado dentro del clip de película, la propiedad _parent resolver cualquier problema en su contexto. Por ejemplo, si el padre_mc MovieClip que contiene otro figlio_mc MovieClip y utilizar el siguiente código:

1
2
3
4
5
/ / Código dentro padre_mc
( ) { figlio_mc. onRelease = function () {
this ) ; // figlio_mc trace (this); / / figlio_mc
this . _parent ) ; // padre_mc trace (this. _parent); / / padre_mc
}

Risalisre el "padre", entonces, es clara e inmediata.

Con las clases, así, sólo código, o la extensión de la propiedad MovieClip _parent no está disponible y podría complicar las cosas! Immaginiiamo tener una clase MyClass :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
MovieClip { Clase MyClass se extiende MovieClip {
MyClass function () {
/ / Constructor
}
/ /
miMetodo function () {
this ) ; // myClass trace (this); / / miClase
; var num = 5;
; var cp = this;
....
[ un oggetto ] ; var myObject = new [un objeto];
( ) { myObject. onLoad = function () {
this ) ; // myObject trace (this); / / myObject
cp ) ; // myClass trace (cp), / / miClase
}
}

, ovvero il puntatore alla classe MyClass . El contexto de MyMethod() es, por supuesto, this , que es el puntero a la clase MyClass . . La variable num , por ejemplo, tiene un ciclo de vida encerrada en el método MyMethod() . Por lo tanto, sólo es visible en el método y serán destruidos a la salida. . Lo mismo para la variable myObject inicializa un evento que, sin embargo, en este caso onLoad . lasciandoci, apparentemente, senza il puntatore alla classe madre myClass . Cuando se activa onLoad() se convertirá en el contexto myObject dejando, al parecer, sin el puntero a la clase padre myClass . , ha lo stesso contesto della variabile myObject ! Una mirada más cercana en el código vemos que la variable cp , definido en el método myMethod() , tiene el mismo contexto de la variable myObject ! dell'oggetto myObject in quanto condivide con esso lo stesso contesto. De hecho, la variable cp (puntero de la clase) será visible en el método onLoad objeto myObject ya que comparte el mismo contexto. 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”). De hecho, el método myMethod() no es sólo porque el objeto se cancela la asignación myObject tiene la necesidad de "vivir" en el más de lo esperado, ya que ha "asignado" un evento (todo esto se trata de Flash en nuestro "conocimiento").

Asesoramiento

Para los eventos asociados a los botones o clip de película sería un buen hábito de usar la siguiente forma:

1
2
3
4
5
my_mc onRelease = myOnRelease.;
myOnRelease función () {
this ) ; // _root trace (this) / / _root
"Click me" ) ; trace ("Haga clic en mí");
}

En lugar de la más rápida e inmediata:

1
2
3
4
( ) { my_mc. onRelease = function () {
this ) ; // my_mc trace (this); / / my_mc
"Click me" ) ; trace ("Haga clic en mí");
}

La ventaja de usar una función externa es contar con un contexto neutral y la posibilidad de acceder a la función, independientemente del MovieClip que lo controla. En el segundo caso, por ejemplo, si desea forzar la ejecución del código relacionado con un "clic" del MovieClip se debe usar un código como este:

1
; . my_mc onRelease ();

En la práctica, que yo llamo el evento como si se tratara de un método. Sin embargo, tengo que - de hecho - para que el clip de película my_mc . De otra manera, sin embargo, puede ejecutar el código directamente llamando myOnRelease() . Obviamente, como se muestra en los ejemplos, los ojos a los contextos. . En el primer caso, el contexto de myOnRelease() es el elemento principal del objeto en el que está escrito, por ejemplo, _root . En el segundo caso, sin embargo, el contexto es siempre el clip de película my_mc !

Obligar a un contexto diferente

Concluimos con algunos trucos útiles en muchas circunstancias. in grado di forzare un contesto di un metodo o funzione. Flash proporciona una biblioteca, mx.utils con un objeto Delegate puede obligar a un contexto de un método o función. Su uso es muy simple:

1
2
3
4
5
6
7
8
utils . Delegate ; .. la importación mx utils delegado;
/ /
// puntatore ad un MovieClip my_mc var, / / puntero a un clip de película
// un bottone my_btn / var / un botón
myFunction function () {
this ) ; trace (this);
}
create ( my_mc , myFunction ) ; my_btn onPress Delegado = crear (my_mc, myFunction)..;

El evento onPress my_btn los puntos de botón a una "nueva" función creada precisamente con el contexto my_mc. Al hacer clic en el botón my_btn, el código se ejecuta en myFunction() como contexto se my_mc!

No hay comentarios para esta entrada

Deja un comentario

XHTML PERMISO TAG: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> código de inserción:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL 


Dejar de SOPA