Foros del Web » Creando para Internet » Flash y Actionscript »

EventListener para eventos de Mouse

Estas en el tema de EventListener para eventos de Mouse en el foro de Flash y Actionscript en Foros del Web. ¿Es correcto usar esto? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ActionScript 3.0: Ver original boton.addEventListener(MouseEvent.CLICK, sendSoldier); boton.addEventListener(MouseEvent.ROLL_OVER, infoSoldier); boton.addEventListener(MouseEvent.ROLL_OUT, infoSoldierOut); Un eventlistener cuando se haga click en el ...
  #1 (permalink)  
Antiguo 30/08/2010, 12:40
 
Fecha de Ingreso: mayo-2010
Mensajes: 52
Antigüedad: 14 años, 7 meses
Puntos: 0
EventListener para eventos de Mouse

¿Es correcto usar esto?

Código ActionScript 3.0:
Ver original
  1. boton.addEventListener(MouseEvent.CLICK, sendSoldier);
  2. boton.addEventListener(MouseEvent.ROLL_OVER, infoSoldier);
  3. boton.addEventListener(MouseEvent.ROLL_OUT, infoSoldierOut);

Un eventlistener cuando se haga click en el botón, otro para cuando el ratón esté encima y otro para cuando salga del botón.

Soy nuevo en esto y he leído por ahí algo de "on(release)" y demás, pero no se como hacerlo funcionar.


Muchas gracias.
  #2 (permalink)  
Antiguo 30/08/2010, 13:34
Avatar de TMeister
Crazy Coder
 
Fecha de Ingreso: enero-2002
Ubicación: En la Oficina
Mensajes: 2.880
Antigüedad: 22 años, 11 meses
Puntos: 193
Respuesta: EventListener para eventos de Mouse

Como dices, los Listeners son para AS3 y si, tu ejemplo esta bien aplicado.

on(release) es para AS1 y AS2

Saludos!!
  #3 (permalink)  
Antiguo 31/08/2010, 04:28
 
Fecha de Ingreso: mayo-2010
Mensajes: 52
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: EventListener para eventos de Mouse

Pero el caso es que quiero poner como unos 10 botones con sus respectivos eventListener, ¿no ralentizará eso el funcionamiento del juego?

Otra pregunta:

¿Es posible hacer algo para que, con solo 3 eventListener (click, roll over y roll out), pueda usarlo para todos los botones, en plan que cuando pulse en uno me devuelva un valor y si pulso en otro me devuelva otro valor diferente, así no lleno el código de eventListener y de funciones para cada botón.



Muchísimas gracias.
  #4 (permalink)  
Antiguo 31/08/2010, 06:57
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: EventListener para eventos de Mouse

Cita:
Iniciado por Weahl Ver Mensaje
Pero el caso es que quiero poner como unos 10 botones con sus respectivos eventListener, ¿no ralentizará eso el funcionamiento del juego?

Otra pregunta:

¿Es posible hacer algo para que, con solo 3 eventListener (click, roll over y roll out), pueda usarlo para todos los botones, en plan que cuando pulse en uno me devuelva un valor y si pulso en otro me devuelva otro valor diferente, así no lleno el código de eventListener y de funciones para cada botón.



Muchísimas gracias.

Amigo sabes se soluciona de la siguiente manera aunque yo no estoy acostumbrado a trabajar con botones solo con clips, por que son más versátiles.

Código ACTIONSCRIPT:
Ver original
  1. var valores:Array   = new Array("primer valor","segundo valor", "tercer valor",
  2.                                 "cuarto valor", "quinto valor", "sexto valor")
  3. var i:uint          = 0;
  4. //Cantidad de clips en el escenario.
  5. var t:uint          = valores.length;
  6. //nombre común entre los clips ejemplo:
  7. //boton0, boton1, y así sucesivamente...
  8. var nombre:String   = "boton";
  9.  
  10.  
  11. for(i=0; i<t; i++){
  12.     //obtienes el clip que está en el escenario
  13.     var clip:MovieClip      = getChildByName(nombre+i) as MovieClip;
  14.     //preguntas si existe
  15.     if(clip){
  16.         //asignas un valor a una propiedad llamada "imprimir"
  17.         //que en este caso es el valor de un arreglo
  18.         clip.imprimir       = valores[i];
  19.         //asignas un valor a una propiedad llamada "myindex"
  20.         //que en este caso contiene el índice de la iteración
  21.         clip.myindex        = [i];
  22.         //si existe agregas los eventos
  23.         addlistenerevent(clip);
  24.     }
  25. }
  26.  
  27. function addlistenerevent(a:MovieClip):void{
  28.     //haces que al pasar el mouse sobre el clip
  29.     //aparezca la mano como si fuese un botón
  30.     a.buttonMode        = true;
  31.     //asignas evento CLICK
  32.     a.addEventListener(MouseEvent.CLICK, sendSoldier);
  33.     //asignas evento ROLL_OVER
  34.     a.addEventListener(MouseEvent.ROLL_OVER, infoSoldier);
  35.     //asignas evento ROLL_OUT
  36.     a.addEventListener(MouseEvent.ROLL_OUT, infoSoldierOut);
  37. }
  38.  
  39. function sendSoldier(a:MouseEvent):void{
  40.     //obtienes que clip fue presionado
  41.     var clip:MovieClip = a.currentTarget as MovieClip;
  42.     trace("Obtienes \""+clip.imprimir+"\"");
  43.     trace("Mi índice "+clip.myindex);
  44. }
  45.  
  46. function infoSoldier(a:MouseEvent):void{
  47.     //obtienes que clip por el cual has pasado
  48.     var clip:MovieClip = a.currentTarget as MovieClip;
  49.     trace("ROLL_OVER "+clip.name);
  50. }
  51.  
  52. function infoSoldierOut(a:MouseEvent):void{
  53.     //obtienes que clip por el cual has salido
  54.     var clip:MovieClip = a.currentTarget as MovieClip;
  55.     trace("ROLL_OUT "+clip.name);
  56. }

Espero te sea de ayuda.

Saluda Atte.
Claudio Barrera Asencio.

Última edición por polo_W12; 31/08/2010 a las 07:07 Razón: Me equivoqué.
  #5 (permalink)  
Antiguo 31/08/2010, 09:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 52
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: EventListener para eventos de Mouse

Algo falla y creo que es en el FOR.

Leyendo el código y teniendo en cuenta mi inexperiencia, creo que la variable clip debería ser un array y almacenar cada uno de los valores en la misma, porque con la función FOR tal cual lo que hace es almacenar los valores en la variable clip, por lo que en teoría quedaría almacenado solo el último valor.

Puede ser que el problema sea donde hay que poner la función FOR.

Yo lo tengo tal que así ahora mismo:

Código ActionScript:
Ver original
  1. package  
  2. {
  3.     import flash.display.MovieClip;
  4.     import flash.events.MouseEvent;
  5.     import flash.events.Event;
  6.    
  7.     public class UpMenu extends MovieClip
  8.     {
  9.        
  10.         var valores:Array   = new Array("Soldado","ninja")
  11.         var i:uint          = 0;
  12.         //Cantidad de clips en el escenario.
  13.         var t:uint          = valores.length;
  14.         //nombre común entre los clips ejemplo:
  15.         //boton0, boton1, y así sucesivamente...
  16.         var nombre:String   = "boton";
  17.  
  18.        
  19.         public function UpMenu()
  20.         {
  21.             info.visible = false;
  22.             for(i=0; i<t; i++)
  23.             {
  24.                 //obtienes el clip que está en el escenario
  25.                 var clip:MovieClip      = getChildByName(nombre+i) as MovieClip;
  26.                
  27.                 //preguntas si existe
  28.                 if(clip)
  29.                 {
  30.                     //asignas un valor a una propiedad llamada "imprimir"
  31.                     //que en este caso es el valor de un arreglo
  32.                     clip.imprimir       = valores[i];
  33.                     //asignas un valor a una propiedad llamada "myindex"
  34.                     //que en este caso contiene el índice de la iteración
  35.                     clip.myindex        = [i];
  36.                     //si existe agregas los eventos
  37.                     addlistenerevent(clip);
  38.                 }
  39.             }
  40.             oro.sumar(50)//Cantidad de oro con el que se empieza
  41.         }
  42.        
  43.        
  44.         function addlistenerevent(a:MovieClip):void
  45.         {
  46.             //haces que al pasar el mouse sobre el clip
  47.             //aparezca la mano como si fuese un botón
  48.             a.buttonMode        = true;
  49.             //asignas evento CLICK
  50.             a.addEventListener(MouseEvent.CLICK, sendSoldier);
  51.             //asignas evento ROLL_OVER
  52.             a.addEventListener(MouseEvent.ROLL_OVER, infoSoldier);
  53.             //asignas evento ROLL_OUT
  54.             a.addEventListener(MouseEvent.ROLL_OUT, infoSoldierOut);
  55.         }
  56.        
  57.        
  58.         function sendSoldier(a:MouseEvent):void
  59.         {
  60.             //obtienes que clip fue presionado
  61.             var clip:MovieClip = a.currentTarget as MovieClip;
  62.             trace("Obtienes \""+clip.imprimir+"\"");
  63.             trace("Mi índice "+clip.myindex);
  64.            
  65.             if(oro.currentValue >= 10)
  66.             {
  67.                 var type = clip.imprimir;
  68.                 var unit:MovieClip = new type();
  69.                 stage.addChild(unit);
  70.                
  71.                 oro.sumar(-10);
  72.             }
  73.         }
  74.          
  75.         function infoSoldier(a:MouseEvent):void
  76.         {
  77.             //obtienes que clip por el cual has pasado
  78.             var clip:MovieClip = a.currentTarget as MovieClip;
  79.             trace("ROLL_OVER "+clip.name);
  80.            
  81.             info.visible = true;
  82.         }
  83.          
  84.         function infoSoldierOut(a:MouseEvent):void
  85.         {
  86.             //obtienes que clip por el cual has salido
  87.             var clip:MovieClip = a.currentTarget as MovieClip;
  88.             trace("ROLL_OUT "+clip.name);
  89.         }
  90.        
  91.  
  92.     }
  93.    
  94. }


Por lo que la función FOR solo se ejecuta una vez, es ahí donde me extraña porque el clip no es un Array.

Poniendo el código tal cual (y añadiendo lo básico obviamente) no obtengo ninguno de los TRACE del código.


¿Está bien situado?


Muchas gracias por el código Sr. Barrera.


EDIT: Vale, acabo de comprobar que no funciona con los botones, pero si con MovieClip, ahora entiendo su primera frase del post jeje.

¿Hay alguna forma de aplicarlo a botones? De todos modos intentaré fabricar un botón con MovieClip aunque tenga cero de experiencia.


Muchísimas gracias.

Última edición por Weahl; 31/08/2010 a las 09:31
  #6 (permalink)  
Antiguo 31/08/2010, 10:19
 
Fecha de Ingreso: enero-2008
Ubicación: Concepción, Chile
Mensajes: 76
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: EventListener para eventos de Mouse

Cita:
Iniciado por Weahl Ver Mensaje

EDIT: Vale, acabo de comprobar que no funciona con los botones, pero si con MovieClip, ahora entiendo su primera frase del post jeje.

¿Hay alguna forma de aplicarlo a botones? De todos modos intentaré fabricar un botón con MovieClip aunque tenga cero de experiencia.


Muchísimas gracias.
Amigo:

Sabes que trabajo desde hace dos años con Flash y con ActionScript3 y debo decir que insisto en la versatilidad que puede ofrecer el MovieClip por sobre el Boton, por lo que te recomiendo utilizar MovieClip por sobre Button, pero en cosa de gustos no hay nada escrito.

Saluda Atte.
Claudio Barrera Asencio.
  #7 (permalink)  
Antiguo 31/08/2010, 11:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 52
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: EventListener para eventos de Mouse

Cita:
Iniciado por polo_W12 Ver Mensaje
Amigo:

Sabes que trabajo desde hace dos años con Flash y con ActionScript3 y debo decir que insisto en la versatilidad que puede ofrecer el MovieClip por sobre el Boton, por lo que te recomiendo utilizar MovieClip por sobre Button, pero en cosa de gustos no hay nada escrito.

Saluda Atte.
Claudio Barrera Asencio.

Te haré caso, muchas gracias por el consejo ^^.


Un cordial saludo.

Etiquetas: eventos, mouse
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:08.