Comunidad de diseño web y desarrollo en internet online

Eventos que se capturan unas veces sí y otras no.O_O

Citar            
MensajeEscrito el 10 Ago 2010 06:11 am
Buenas!

No se me ha ocurrido nada más descriptivo para el título, pero es que es lo que pasa. Tengo una serie de botones que al pincharlos se desactivan y ya no se vuelven a activar. El problema es que dentro de una misma ejecución del programa hay veces que algunos por más que los pinches no se desactivan, como si no recibieran el evento CLICK. Otras veces has de pincharlos varias veces para que reaccionen. Otras van todos perfectamente la primera vez que ejecutas el programa, pero la segunda o la tercera no van, o sólo van algunos. ¿¿¿??? Los botones y los addEventListeners se crean todos de la misma forma, dentro de bucles, así que me descoloca que luego reaccionen de formas diferentes.

Yo no sé por dónde van los tiros. Sólo se me ocurre que tenga que ver con la forma en que añado los eventos:
vAzules[i].vmarcos[j].addEventListener(MouseEvent.CLICK, Callback.create(onClick, i, j) , false, 0, true );
por los valores de los parámetros del final.
Hasta he llegado a pensar si es que era cosa de la configuración del mismo Flash CS4.

He extraido la parte problemática del resto del programa, con todas las acciones en el mismo orden, y el resultado es que falla con muchísima menos frecuencia, pero continúa sucediendo a veces lo antes comentado, con lo que parece que el problema no está relacionado con la interacción entre esta parte y lo demás.

Ahí va:
http://www.megaupload.com/?d=YZ7L65CR

Lo que vereis son unos cuadros rojos. Al pasar el puntero sobre ellos quedan cubiertos por unos azules que contienen otros blancos. Los blancos, al pasar sobre ellos cambian de color para indicar que son clickables. Seguramente podreis desactivalos todos ejecución tras ejecución sin problema, porque el problema aparece con muy poca frecuencia en este caso. Pero así muestro cómo construyo las cosas. En el programa en el que uso ésto es totalmente lo contrario, lo que apenas ocurre es que vayan todos bien en alguna ejecución.

NOTA: El problema aparece tanto si desactivo con .mouseEnabled = false; como con removeEventListener.

Por Eldelgas

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Ago 2010 07:43 am
BuenAS:

Imagino que Callback.create() es un método estático que utilizas para tener centralizados todos los listeners; imagino también que debe existir un Callback.delete() cuando eliminas el listener. El problema puede venir de que cuando llamas a este último no elimine el correcto, asegurate de pasar la referencia correcta.

Un saludo.
P.D.:No he bajado el código.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 10 Ago 2010 07:53 am
Probablemente el problema se deba a la función create de tu clase Callback. Supongo que estarás utilizando esta clase para poder pasar parámetros a la función onClick que se ejecuta tras el evento (en tu caso pasas las varibles i j ). Pordrías empezar probando tu aplicación sin el uso de tu clase Callback para intentar localizar la causa del problema.

Un saludo.

Por ElMarkis

55 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Ago 2010 05:33 pm
Hola de nuevo!
Bueno, gracias a ambos por contestar, porque me ha servido para resolverlo.

Ian Thomas es el autor de la clase Callback, la encontré buscando un modo de pasar parámetros a los eventos, como dice ElMarkis. Y no, Lukánicos, no existe un Callback.delete(), sólo el create, en esa clase. De todas formas, siguiendo vuestro consejo estuve buscando por estos foros otra forma de hacerlo. He perdido el hilo donde lo encontré, pero se trataba de dejar el valor que se quiere pasar previamente en atributos creados a propósito en la clase a la que pertenece la instancia que captura el evento. Luego, una vez en la función que dispara el evento se accede a dichos valores con e.target.nombre_variable. Lo de la clase Callback me parece más cómodo y limpio, así te ahorras tener que estar metiendo variables en la clase que a lo mejor no tienen nada que ver con ella. Pero nunca está de más saber alternativas.

El caso es que cambio todo eso y seguía sucediendo lo mismo. Y ya a punto de dibujar un pentágono en el suelo me he dado cuenta de que tenía ...una variable mal puesta en los índices de un vector. ¬¬U Ahí, fallando lo justito para no resultar evidente ni provocar errores de compilación, la muy...

En fin. por lo menos me sirvió para centrar la búsqueda en la función que maneja el evento, que era donde estaba el fallo, porque pensaba que tenía que ser algo de la profundidad, el anidamiento...

Gracias por vuestro tiempo!

Por Eldelgas

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Ago 2010 01:45 pm
BuenAS:

¡Ah! ya sabía yo que me sonaba de algo la clase CallBack. Fué (y seguirá siendo, imagino) bastante famosa hace un tiempo.

No sé, yo a esto lo llamo pensar en AS2 cuando programas en AS3. Hay gente que se siente más cómoda aplicando esquemas que le han funcionado; en mi caso prefiero cambiar el chip cuando estoy con una versión u otra :) .

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.