Ver Mensaje Individual
  #5 (permalink)  
Antiguo 31/08/2010, 09:12
Weahl
 
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