Sobre los eventos en AS3
Constructor de la clase Event
public function Event(type:String, bubbles:Boolean = false, cancelable:Boolean = false)
Fases en la propagación de eventos
Se origina en el nodo stage (por ser el que está más "arriba" de todos) y va bajando por las Display Lists hasta llegar al objecto que originó el evento.
Esta fase se produce cuando el evento se procesa en el nodo destino (o target como veremos más adelante), es decir, el nodo que originó el evento.
En este caso el evento recorre el camino inverso al de la fase de capturing. Empezando por el nodo destino, va subiendo hasta alcanzar el objeto stage.
Por defecto sólo se llamarán a los listeners encontrados en las fases de targeting y bubbling.
Nota: para que podamos detectar un evento en su fase de capturing deberemos registrarlo indicando true en el parámetro useCapture del método addEventListener.

To bubble or not to bubble?
El constructor de un evento puede recibir un parámetro boleano bubble que indica si el evento realiza las tres fases que acabamos de comentar. Por defecto su valor es false por lo que sólo se llamará a los listeners que se encuentren registrados en el target (lo que equivaldría a decir que un evento con bubbles a false sólo realiza la fase de targeting). Si el parámetro bubbles es true se realizarán las tres fases mencionadas anteriormente, por lo que se llamarán a los listeners que se encuentren en las fases de targeting y bubbling.
La propiedad eventPhase
La propiedad eventPhase de la clase Event nos permite saber en que fase se encuentra un evento en un momento dado. Puede tener los valores 1, 2 y 3 mapeados a las constantes EventPhase.CAPTURING_PHASE, EventPhase.AT_TARGET y EventPhase.BUBBLING_PHASE. Si por ejemplo queremos capturar un evento en el stage
El parámetro cancelable
El tercer parámetro que acepta el constructor de la clase Event es el de cancelable y como su nombre indica se utiliza para permitir que el evento sea detenido (o cancelado) usando los métodos stopPropagation y stopInmediatePropagation.
Diferencia entre stopPropagation y stopImmediatePropagation
Ambos métodos son llamados sobre la instancia de Event y previenen al evento de seguir propagándose. La única diferencia entre ambos es que, mientras que stopPropagation hará que el evento no se propague a otros niveles, stopImmediatePropagation además hará que el evento no sea recibido en el mismo nivel en el que se encuentra este método (currentTarget).
Diferencia entre target y currentTarget
La clase Event dispone de dos propiedades que son target y currentTarget. La primera hace referencia al DisplayObject que lanzó el evento, mientras que currentTarget indica el DisplayObject que el evento está procesando en el momento de pedir la propiedad (en el nivel en el que se encuentra en ese momento).
Ejemplo: A tiene un hijo B. Si B lanza un evento y A tiene definido un listener para ese evento, cuando B lo procese el target del evento será B y el currentTarget será A. Si el evento es capturado directamente en B, target y currentTarget serán iguales y apuntarán a B.
Eventos globales
Conceptualmente no existen eventos globales en AS3 como los que había en AS2 (ej: MouseMove). Lo más parecido sería registrar un listener en el objeto stage ya que todos los eventos que tengan el parámetro bubbles a true alcanzarán el objeto stage en su fase de bubbling (los eventos de ratón tienen este comportamiento por defecto).
4 Comments
Jump to comment form | comments rss [?] | trackback uri [?]