Comunidad de diseño web y desarrollo en internet online

rastros del mouse (ayuda)

Citar            
MensajeEscrito el 29 Mar 2009 09:30 pm
estoy mirando y probando el codigo de los rastros del mouse disponible en la pagina http://www.sargentoweb.com/flash_as3/?doc=19] el problema es que la ultima linea no me funciona, la linea dice:

Código :

removeChild( event.target );


la funcion completa es esta

Código :

function fDisolver( event:Event ):void {
// Aumentamos la escala
event.target.scaleX = event.target.scaleY += 0.06;
// Reducimos la opacidad
event.target.alpha -= 0.03;
// Evaluamos si el objeto es completamente transparente
if( event.target.alpha < 0 ){
// Removemos su 'Listener'
event.target.removeEventListener( Event.ENTER_FRAME, fDisolver );
// Removemos el objeto
removeChild( event.target );
}
}



el problema que me arroja es "1118: Conversión implícita de un valor con tipo estático Object a un tipo flash.display:DisplayObject posiblemente no relacionado."

alguien me puede decir como solucionarlo....

ahh y tambien otra cosa, el en su pagina dice que agrego una linea para que el maximo de cirulos en el stage sea 200, si alguien me la puede facilitar le agradeceria muxo, ya que hasta ahora estoy aprendiendo AS3

gracias...

Por tintin

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2009 09:58 am
Para limitar el número de círculos habría que modificar la función agregarCirculos

Código ActionScript :

function fAgregarObjeto( event:MouseEvent ):void {
circulo = new Circulo();
circulo.x = stage.mouseX;
circulo.y = stage.mouseY;
if (numChildren>200){  //si el número de hijos es mayor que 200
   removeChildAt(0);  //<--eliminamos el primero
}
addChild( circulo );
}


Para lo del eventTarget creo que el problema es una conversión de cast

Código ActionScript :

removeChild( DisplayObject(event.target) );  //<--le decimo que es un Objeto de tipo displayObject

Pero, en cualquier modo, haz un "trace" para ver qué es event.target

Código ActionScript :

trace(event.target)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2009 01:22 pm
ey eliseo2.... muchas gracias por tus respuestas.... muy acertadas

pero quisiera pedirte otro favor.... cual es la diferencia entre currentTarget y target ????
cuando se usa uno y cuando el otro

gracias

Por tintin

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2009 02:47 pm
Tiene que ver con cómo se propagan los eventos.
Imaginemos que tenemos un boton "boton" dentro de otro MC "contenedor". Le añadimos los lísteners del MouseDown

Código ActionScript :

contenedor.boton.addEventListener(MouseEvent.MOUSE_DOWN,onBotonDown,false, 0, true);
contenedor.addEventListener(MouseEvent.MOUSE_DOWN,onContenedorDown,false, 0, true);
function onBotonDown(e:event){
          trace("onBotonDown")
}
function onContenedorDown(e:event){
          trace("onContenedorDown")
}

¿qué ocurrirá cuando le pulsemos al botón? Anteriormente, en flash, el "contenedor" NO se enteraba. ahora sí. El "target" será al que le añadimos el listener. el currentTarget al que pulsamos.
El ejemplo típico es el que he comentado antes: Una ventana dragueable (cuando pulsamos un botón dentro de la ventana no queremos que se empiece a draguear). Aunque se nos pueden ocurrir otros. Existen (en inglés) tres enlaces interesantes a este respecto en el blog de Rich Shupe y Zevan Rosser
The Event Object
The Event phases in action
y
Stopping de event Phases

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2009 10:14 pm
mmmm
para ser sincero no me quedo muy claro, yo creo que me falta mas conocimiento para entenderlo..... seguire leyendo y cualquier cosa estare de nuevo por aca

gracias eliseo

Por tintin

26 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Mar 2009 01:44 pm

Eliseo2 escribió:


¿qué ocurrirá cuando le pulsemos al botón? Anteriormente, en flash, el "contenedor" NO se enteraba. ahora sí. El "target" será al que le añadimos el listener. el currentTarget al que pulsamos.

ES AL REVÉS: currentTarget coge el valor de a quién agregamos el listener, target es siempre el pulsado :oops: :oops: :oops:

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 31 Mar 2009 05:52 pm
Un ejemplo lúdico. Imaginemos un típico juego en el que tenemos un montón de objetos moviéndose por nuestra película. Nosotros con el ratón los tenemos que pulsar hasta acabar con ellos.
Está claro que podríamos añadir un MouseEvent.MOUSE_DOWN a cada uno de ellos y eliminarlos ¡¡puff!!

Código ActionScript :

//supongo que tengo una clase Pato que se mueve aleatoriamente por toda la pantalla(*)
for (var i:Number=0;i<1000;i++){
    var pato:Pato=new Pato()
    addChild(pato)
    pato.addEventListener(MouseEvent.MOUSE_DOWN,eliminarPato)
}
function eliminarPato(e:Event){
     var pato:Pato=e.target as Pato
     pato.removeListener(MouseEvent.MOUSE_DOWN,eliminarPato)
     removeChild(pato)
}

Pero también podemos aprovecharnos de que, cuando hacemos un click sobre un pato, lo estamos haciendo también en el stage. Así que podríamos tener algo como

Código ActionScript :

//hacemos el listener SOBRE "this"
this.addEventListener(MouseEvent.MOUSE_DOWN,eliminarPato)

for (var i:Number=0;i<1000;i++){
    var pato:Pato=new Pato()
    addChild(pato)
}
function eliminarPato(e:Event){
     //e.currentTarget será SIEMPRE el stage
     //e.target será un "pato cualquiera" si pichamos en un pato
     if (e.target!=e.currentTarget){
         var pato:Pato=e.target as Pato
         removeChild(pato)
     }
}

Bueno, con propiedad sería mejor escribir

Código ActionScript :

function eliminarPato(e:Event){
     if (e.target is Pato){  //<--si se ha pinchado un pato
         var pato:Pato=e.target as Pato
         removeChild(pato)
     }
}

Debido a que si tenemos cualquier otro MC por la pantalla lo podemos eliminar con sólo pincharlos.

Bueno, a lo que iba, resulta que nos hemos librado de añadir 1000 listeners y tener que removerlos cada vez que damos a un pato

(*)Sería más optimo moverlos en un único evento ENTER_FRAME sobre nuestra película que controlara todos los patos -pero ya dije que era sólo un ejemplo-

Por Eliseo2

710 de clabLevel



 

firefox

 

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