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 originalpackage
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class UpMenu extends MovieClip
{
var valores:Array = new Array("Soldado","ninja")
var i:uint = 0;
//Cantidad de clips en el escenario.
var t:uint = valores.length;
//nombre común entre los clips ejemplo:
//boton0, boton1, y así sucesivamente...
var nombre:String = "boton";
public function UpMenu()
{
info.visible = false;
for(i=0; i<t; i++)
{
//obtienes el clip que está en el escenario
var clip:MovieClip = getChildByName(nombre+i) as MovieClip;
//preguntas si existe
if(clip)
{
//asignas un valor a una propiedad llamada "imprimir"
//que en este caso es el valor de un arreglo
clip.imprimir = valores[i];
//asignas un valor a una propiedad llamada "myindex"
//que en este caso contiene el índice de la iteración
clip.myindex = [i];
//si existe agregas los eventos
addlistenerevent(clip);
}
}
oro.sumar(50); //Cantidad de oro con el que se empieza
}
function addlistenerevent(a:MovieClip):void
{
//haces que al pasar el mouse sobre el clip
//aparezca la mano como si fuese un botón
a.buttonMode = true;
//asignas evento CLICK
a.addEventListener(MouseEvent.CLICK, sendSoldier);
//asignas evento ROLL_OVER
a.addEventListener(MouseEvent.ROLL_OVER, infoSoldier);
//asignas evento ROLL_OUT
a.addEventListener(MouseEvent.ROLL_OUT, infoSoldierOut);
}
function sendSoldier(a:MouseEvent):void
{
//obtienes que clip fue presionado
var clip:MovieClip = a.currentTarget as MovieClip;
trace("Obtienes \""+clip.imprimir+"\"");
trace("Mi índice "+clip.myindex);
if(oro.currentValue >= 10)
{
var type = clip.imprimir;
var unit:MovieClip = new type();
stage.addChild(unit);
oro.sumar(-10);
}
}
function infoSoldier(a:MouseEvent):void
{
//obtienes que clip por el cual has pasado
var clip:MovieClip = a.currentTarget as MovieClip;
trace("ROLL_OVER "+clip.name);
info.visible = true;
}
function infoSoldierOut(a:MouseEvent):void
{
//obtienes que clip por el cual has salido
var clip:MovieClip = a.currentTarget as MovieClip;
trace("ROLL_OUT "+clip.name);
}
}
}
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.