Comunidad de diseño web y desarrollo en internet online

Problemas con event.target.name

Citar            
MensajeEscrito el 14 Sep 2012 06:03 pm
Hola de nuevo. Tengo un problema que por muchas vuelas que le de, no consigo solucionar.

Lo que hago es crear dinámicamente unos puntos en pantalla cada vez que presiono con el ratón. A medida que los creo, les voy dando el nombre "punto"+i, siendo i un contador. Lo que quiero conseguir es que cuando pase por encima del punto y cuando lo presione, me devuelva el nombre que le he dado dinámicamente (e.target.name). Pero ahay algún problema y no sé por qué funciona cuando hago click sobre le punto:
Salida en consola = Nombre -> punto1

pero no cuando paso por encima de él:
Salida en consola = Nombre -> root1

Os dejo el código para ver si me podéis ayudar.

Código ActionScript :

//LISTENERS-------------------------------
addEventListener(MouseEvent.ROLL_OVER, encima);
addEventListener(MouseEvent.ROLL_OUT, fuera);
stage.addEventListener(MouseEvent.CLICK, presionar);
addEventListener(MouseEvent.MOUSE_DOWN, sobre);
//VARIALBLES-------------------------------
var i:int=0;
var chivato:int=0;
//FUNCIONES-------------------------------
function encima(e:MouseEvent):void
{
trace("Nombre -> "+e.target.name);
chivato=1;
}
function fuera(e:MouseEvent):void
{
trace("fuera de los puntos");
chivato=0;
}
function presionar(e:MouseEvent):void
{
   if(chivato==0)
   {
   i++;
   trace(i);
   var puntoBase:MovieClip = new MovieClip();
   puntoBase.graphics.beginFill(0x333333);
   puntoBase.graphics.drawCircle(0,0,10);
   puntoBase.graphics.endFill();
   puntoBase.x = this.mouseX;
   puntoBase.y = this.mouseY;
   puntoBase.name="punto"+i;
   addChild(puntoBase);
   }
   else
   {
      trace("sobre el punto");
   }
}
function sobre(e:MouseEvent):void
{
trace("Nombre -> "+e.target.name);
}


Un saludo y gracias.

Por maxchufa

9 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Sep 2012 09:15 pm
hace la prueba con currentTarget envés de target

Por WWCC

113 de clabLevel



Genero:Masculino  

Diseñador y desarrollador multimedia

chrome
Citar            
MensajeEscrito el 14 Sep 2012 09:32 pm

Código ActionScript :

addEventListener(MouseEvent.ROLL_OVER, encima);

function encima(e:MouseEvent):void
{
trace("Nombre -> "+e.target.name);
chivato=1;
}


Aquí por lo que veo el problema es el "target" ya que el detector de eventos no está asignado al MovieClip.

En lugar de:

Código ActionScript :

addEventListener(MouseEvent.ROLL_OVER, encima);


Debería ser por ejemplo:

Código ActionScript :

puntoBase.addEventListener(MouseEvent.ROLL_OVER, encima);


Pero al crear variables dinámicas yo hubiera hecho lo siguiente:

Código ActionScript :

var listaDePuntos:Array;

function presionar(e:MouseEvent):void
{
   if(chivato==0)
   {
   i++;
   trace(i);
   var pB:MovieClip = new MovieClip();
   pB.graphics.beginFill(0x333333);
   pB.graphics.drawCircle(0,0,10);
   pB.graphics.endFill();
   pB.x = this.mouseX;
   pB.y = this.mouseY;
   pB.addEventListener(MouseEvent.ROLL_OVER, encima);
   listaDePuntos.push =pB;
   addChild(pB);
   }
   else
   {
      trace("sobre el punto");
   }
}

Y luego así:

Código ActionScript :

function encima(e:MouseEvent):void
{
  for(j=0; j<=listaDePuntos.length; j++){
     if(listaDePuntos[j]==e.target){
           trace("Has hecho roll over sobre el punto número= "+ j);
            chivato=1;
    }
 }
}



Espero que te haya sido de utilidad.

Por viroguitar

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Sep 2012 11:02 pm
Me corrijo:

Código ActionScript :

listaDePuntos.push (pB);

Por viroguitar

10 de clabLevel



 

chrome
Citar            
MensajeEscrito el 15 Sep 2012 07:39 pm
Gracias por la respuesta viroguitar. El planteamiento que haces es interesante y lo mejor de todo: funciona. Dándole vueltas a tu explicación, he cambiado el Listener que activaba el evento MouseEvent.ROLL_OVER y lo he colocado dentro de la función que activa el MouseEvent.CLICK.

Código ActionScript :

function presionar(e:MouseEvent):void
{
   if(chivato==0)
   {
   i++;
   trace(i);
   var puntoBase:MovieClip = new MovieClip();
   puntoBase.graphics.beginFill(0x333333);
   puntoBase.graphics.drawCircle(0,0,10);
   puntoBase.graphics.endFill();
   puntoBase.x = this.mouseX;
   puntoBase.y = this.mouseY;
   puntoBase.name="punto"+i;
   addChild(puntoBase);
   puntoBase.addEventListener(MouseEvent.ROLL_OVER, encima);//Aquí es donde lo he colocado
   }
   else
   {
      trace("sobre el punto");
   }
}

Al final lo que he hecho es asignar el detector de eventos al MovieClip.
Gracias de nuevo.

Por maxchufa

9 de clabLevel



 

firefox

 

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