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);