Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/06/2010, 05:54
JMCV
 
Fecha de Ingreso: agosto-2009
Mensajes: 35
Antigüedad: 15 años, 2 meses
Puntos: 0
Crear botones con texto en bucle for

Hola, buenas. A ver si alguien puede ayudarme porque a mi ya no se me ocurre.

La cuestión es que estoy creando una aplicación en flash que carga su contenido a través del xml y también los botones que acceden al contenido propiamente dicho.

El problema llega en el estado sobre de estos botones ya que cada uno de ellos tienen un texto que se carga a través de un nodo del xml. Por desgracia, un Simple Button no puede tener dentro un TextField por lo que hay que colocar el botón y el texto en, digamos capas, diferentes (no uno dentro del otro). La cuestión es que si coloco el TextField por encima del boton no puedo hacer clic en el botón y si coloco el botón por encima de la zona activa, en el estado sobre se me tapa el texto.

Había pensado en hacer un MovieClip en vez de un botón pero el problema es que para hacer un estado sobre o un estado press hay que generarlo mediante una función (MouseEvent.MOUSE_OVER) y como los botones son generados mediante un bucle for no me acepta el listener aunque lo meta dentro de éste.

¿A alguien se le ocurre cómo solucionarlo? A continuación, os paso el código:


Código:
var carga:URLLoader = new URLLoader();
var xmlExterno:XML;
var i:Number=0;
var a:Number=0;
var paginar:Loader=new Loader();
var lista:XMLList;
var loc:Number;
var total:Number;
var peticion:URLRequest=new URLRequest();
peticion.url="pantallas.xml";
carga.load(peticion);
var me:ContextMenu = new ContextMenu();
var contenedor:MovieClip;
me.hideBuiltInItems();
this.contextMenu=me;
stage.stageFocusRect=false;

/*-----------------------Propiedades  botones-------------------------*/
var tipolinea:String=GradientType.LINEAR;
var coloreslinea:Array=[0xFFFFFF,0xFFFFFF];
var alfaslinea:Array=[1,0];
var ratioslinea:Array=[0x00,0xFF];//[radio inicial, radio final]
var spreadMethodlinea:String=SpreadMethod.REFLECT;
//var interp:String = InterpolationMethod.LINEAR_RGB; 
//var focalPtRatio:Number = 0; 
var matrixlinea:Matrix = new Matrix();
var boxWidth:Number=100;
var boxHeight:Number=1;
var boxRotation:Number=Math.PI;
var tx:Number=0;
var ty:Number=0;
matrixlinea.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty);
var caja:TextField;
var up:Sprite;
var linea:Shape=new Shape();
linea.graphics.beginGradientFill(
	 tipolinea,  
	coloreslinea, 
	alfaslinea,
	ratioslinea,
	matrixlinea,  
	spreadMethodlinea  
  );
var degradado:Shape = new Shape();
degradado.graphics.beginGradientFill(
	 tipolinea,  
	coloreslinea, 
	alfaslinea,
	ratioslinea,
	matrixlinea,  
	spreadMethodlinea  
  );
/*------------------------------------------------------------------------------*/

function cargarXML(event:Event) {
	loc=12;
	xmlExterno=new XML(event.target.data);
	lista=xmlExterno.children();
	total=lista.length();
	trace("Total: "+total);
	trace(lista[i].attribute("nombre"));
	for (i=0; i<total; i++) {//inicio del bloque for

		trace("i: "+i);
		trace("a: "+a);

		caja=new TextField();
		var contenido=lista[i].attribute("nombre");
		trace(contenido);
		caja.autoSize=TextFieldAutoSize.CENTER;
		caja.selectable=false;
		caja.y=loc;
		caja.x=96;
		caja.htmlText="<font color='#000000'><font size='11'><font face='Arial, Helvetica, sans-serif'><font color='#013763'>"+contenido+"</font></font></font></font>";
		loc+=31;
		trace("Loc: "+loc);
		contenedor=new MovieClip();
		var boton:SimpleButton=new SimpleButton  ;
		up = new Sprite();


		up.graphics.beginFill(0xFF9900,1);

		up.graphics.drawRect(0,-8,200,caja.height+12);



		if (i>0||a>0) {
			linea.graphics.drawRect(2, caja.y+2, 200, 1);
			addChild(linea);
		}
		
			
		boton.hitTestState=up;
		boton.enabled=true;
		boton.x=0;
		boton.y=caja.y;
		
		
		degradado.graphics.drawRect(up.x, up.y-7, up.width, up.height);
		boton.overState=degradado;
		boton.useHandCursor=true;
		
		
		cargador.addChild(contenedor);
		contenedor.addChildAt(boton,0);
		contenedor.addChildAt(caja,1);
		
		
		caja.name="caja_"+i+"_"+a;
		boton.addEventListener(MouseEvent.CLICK, ir);
		caja.addEventListener(MouseEvent.CLICK, ir);
		boton.name="boton"+i+"_"+a;
	}//cierre del bucle for
	addChild(paginar);
	paginar.x=202;

	var img:URLRequest=new URLRequest(lista.pelicula[a]);
	paginar.load(img);
	i=0;
	a=0;
}


carga.addEventListener(Event.COMPLETE,cargarXML);