Comunidad de diseño web y desarrollo en internet online

escuchador de eventos para instancia dinámica Bitmap!

Citar            
MensajeEscrito el 14 Jul 2011 10:02 am
Hola chicos!

Estoy haciendo un índice con un código que crea instancias Bitmap y TextField dinámicas según etiquetas XML hay en un archivo y me ocurre algo para mí extraño. Si aplico un escuchador a las instancias dinámicas de texto no hay problema, pero si lo hago a las dinámicas Bitmap no me hace caso ¿....? no me lo explico.

Aquí tenéis el texto y muchas gracias de antemano, sin vosotros no hubiera llegado hasta este punto...

Código ActionScript :

            for (var p:uint = 0; p < Xml.hoja.bloque1Pregunta.length(); p++)
               
            {      
            //---------------el icono---------------------//
                  this["Capitulo"+p]=new Bitmap(IMG)
                  addChild(this["Capitulo"+p]);         
            //---------------el texto---------------------//
               this["TextoPregunta"+p]=new TextField();
               this["TextoPreguntaString"+p]=new String();
               this["TextoPreguntaString"+p]=Xml.hoja.bloque1Pregunta[p].texto;
               this["TextoPregunta"+p].text=this["TextoPreguntaString"+p];
               addChild(this["TextoPregunta"+p]);
               
   this["Capitulo"+p].addEventListener(MouseEvent.CLICK, PinchadoIndice);
                  
            }
Arriba veis el escuchador para el icono y no funciona, pero si se lo pongo a la instancia "this["TextoPregunta"+p]" sí lo hace ¿....?

Por JoseCarb

20 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jul 2011 01:25 pm
Si miras la ayuda, verás que la clase Bitmap no tiene evento CLICK, con lo cual lo que ocurre no es tan extraño, http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Bitmap.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6
Pon el Bitmap dentro de un Sprite y dale el listener al Sprite contenedor

Por otro lado, una idea para que el c{odigo sea mas legible y de paso le ahorres algunos lookups al procesador. La idea es que uses variables dentro del loop, algo así>

Código ActionScript :

 for (var p:uint = 0; p < Xml.hoja.bloque1Pregunta.length(); p++)              
            {       
            (...)
               var txt =new TextField(); 
               txt.name = this["TextoPregunta"+p].
               txt.text=Xml.hoja.bloque1Pregunta[p].texto; 
               addChild(txt); 
                (...)                   
            }

De hecho, a menos que necesites hacer un getChildByName, la segunda línea está de más. Y no hace falta instanciar un string, lo asignas directamente, ya que la propiedad del XML ya es de tipo String. Lo de la variable local aplica a todas las notaciones de Array, típicas de AS2

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2011 02:22 pm
wow cuánta información jorge, gracias, me pongo a ello y te cuento.

Por JoseCarb

20 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jul 2011 04:57 pm
Perfecto Jorge!

¿getChildByName me serviría para que el programa me devuelva el nombre de la instancia sobre la que pincho? porque leo la documentación y no me queda claro. Cuando hago un trace me devuelve solo el tipo de instancia sobre la que pincho pero no su nombre de variable dinámica. "trace(e.currentTarget)" y me devuelve "[object Sprite]"

Lo que intento es que al pinchar sobre la instancia dinámica Bitmap, dentro del Sprite, identifique su valor de p para que le lleve a esa etiqueta del XML.

P.D. Necesito unas vacaciones porque mi cabeza fluctúa...
P.D.2. Me tienes que recomendar documentación para no ser tan pesado y poder ayudar también :oops:

Por JoseCarb

20 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Jul 2011 06:04 pm
Para capturar el nombre harías>

trace(e.target.name)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Jul 2011 09:42 am
Buenos días! hecho, con la sorpresa de que todas las instancias Bitmap tienen el mismo nombre y las TextField sin embargo no...Este es el trace que me da al pinchar por orden de representación las distintas instancias, primero el Bitmap y luego el TextField que aparece bajo él:

instance4
instance6
instance4
instance8
instance4
instance10
instance4
instance12
instance4
instance14
instance4
instance16

Cada instancia4 es uno de los Bitmap, sin embargo los TextField salen numerados sumados de 2 en 2 ¿...?

Por JoseCarb

20 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 Jul 2011 01:29 pm
Mira lo que te mostré para el name del textfield>

txt.name = this["TextoPregunta"+p].

¿Hiciste lo mismo para el Sprite que contiene al bitmap?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Jul 2011 06:34 pm
Sí, el código actual es:

Código ActionScript :

for (var p:uint = 0; p < Xml.hoja.Capitulo1Bloque1Pregunta.length(); p++)
               
            {
            //---------------el icono---------------------//
                  img.name=this["Capitulo"+p]=new Bitmap(IMG)
                  ContenedorIndice.addChild(this["Capitulo"+p]);                  
            //---------------el texto---------------------//
               txt.name=this["TextoPregunta"+p]=new TextField();
               this["TextoPregunta"+p].text=[p+1]+" "+Xml.hoja.Capitulo1Bloque1Pregunta[p].texto;
               this["TextoPregunta"+p].selectable = false;
               ContenedorIndice.addChild(this["TextoPregunta"+p]);
               ContenedorIndice.addEventListener(MouseEvent.CLICK, PinchadoIndice);
            }

function PinchadoIndice(e:MouseEvent):void{

   trace(e.target.name)
}
            }

Por JoseCarb

20 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 Jul 2011 06:46 pm
¿Que se supone que hace esto?

img.name=this["Capitulo"+p]=new Bitmap(IMG)

name es una propiedad de la instancia creada, de hecho no se como no te da error de compilación

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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