Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/11/2009, 09:58
Dustito
 
Fecha de Ingreso: abril-2008
Mensajes: 143
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: boton que se quede pulsado (AS3)

Haber me explico, tengo hecha una galeria de imagenes con categorias, solo me queda crear los botones de la galeria y al pinchar el boton de la categoria que se quede pulsado el boton de la categoria que pinche y los demas desmarcados.

En principio creo lo botones llamando auna clase boton la cual le doy el nombre de la categoria, asi saco tanto botones como categorias tenga...

El problema esta a la hora de hacer que al clickear el boton se quede pulsado y al pulsar otro ese anterior se desmarque y se active el nuevo...

Otro problema que tengo es que nose como indicarle al codigo principal la categoria que ha sido clickeada, tenia una variable donde indico el id de la categoria seleccionada pero nose como pasarle ese parametro desde la funcion de la clase boton al codigo principal...

os pego el codigo haber si alguien me ayuda!!

CODIGO PRINCIPAL

Código:
var i:Number;
var tb:MovieClip;
var vis:MovieClip;
var dirX:Number = 0;
var dirY:Number = 0;
var ldr:Loader;
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
var categoria:Number =1;
var foto; Loader;
var xButton:Number = 0;

xmlLoader.load(new URLRequest("imagenes.xml"));

xmlLoader.addEventListener(Event.COMPLETE, CargaDirecta);


function CargaDirecta(e:Event):void
		{
			xmlData = new XML(e.target.data);
			//pruebas
			trace(xmlData.categoria.(@id==categoria).foto.(@id=="1").@name);
			trace(xmlData.categoria.(@id==categoria).foto.length());
			trace(xmlData.categoria.length());
			trace(xmlData.categoria.(@id==categoria).foto.(@id=="1").@thumb);
			//pruebas			
			//saco tanto botones como categorias, enviandole el nombre de la categorita 
			for (i = 1; i <= xmlData.categoria.length(); i++)
			{
				// Instancializamos la clase ButtonStd
				var myButton:ButtonStd = new ButtonStd (xmlData.categoria.(@id==i).@name, i);
				// Ubicamos el nuevo ButtonStd
				// ( fijaros que no es _x y _y )
				myButton.x = 10+xButton;
				myButton.y = 10;
				xButton=+100;
				// Añadimos el ButtonStd al escenario
				// esto equivale a un attachMovie
				addChild(myButton);
			}
			//recorro en el XML la categoria seleccionada para mostrar sus thumbnails
			for (i = 1; i <= xmlData.categoria.(@id==categoria).foto.length(); i++)
			{
				tb = new MovieClip();
				tb.x = 75 * dirX + 5;
				tb.y = 75 * dirY + 50;
				addChild(tb);
				dirX++;
				
				if (dirX == 2)
				{
					dirX = 0;
					dirY++;
				}
				CargarThumbs();
			}
		}
		
function CargarThumbs():void
		{
			//cargo la imagen en el movie clip y lo muestro
			ldr = new Loader();
			ldr.load(new URLRequest(xmlData.categoria.(@id==categoria).foto.(@id==i).@thumb));
			tb.addChild(ldr);
			Click(i);
		}
		
function Click(n:Number):void
{
	function alClick(e:MouseEvent):void
	{
		//Muestro la imagen en grande si pinchas en el thumbnail
		vis = new MovieClip();
		foto = new Loader();
		foto.load(new URLRequest(xmlData.categoria.(@id==categoria).foto.(@id==n).@image));
		vis.x = 475 - (xmlData.categoria.(@id==categoria).foto.(@id==n).@tam)/2;
		vis.y = 50;
		addChild(vis);
		vis.addChild(foto);
	}
	ldr.addEventListener(MouseEvent.CLICK, alClick);
}
CLASE BOTON:

Código:
package {

// Contiene la libreria para objectos MovieClip
import flash.display.MovieClip;
// Contiene la libreria para manipulacion de eventos del raton
import flash.events.MouseEvent;
// Contiene la libreria para manipulacion de textos
import flash.text.TextField;

// Definimos el nombre de la clase
// Debe empezar por mayusculas y tener
// el mismo nombre que el archivo que la contiene
public class ButtonStd extends MovieClip {
	
	var idBoton:Number;

	

// Método constructor que inicializa la clase
public function ButtonStd(_label:String, idBoton:Number) {
this._label = _label;
this.idBoton = idBoton;
this.setEvents();
}

// Metodo 'setter' para modificar la etiqueta del boton
public function set _label(_label:String):void {
// Usamos la función getChildByName cuando queremos buscar un
// elemento creado directamente en este caso y con nombre
//label_txt. Por otra parte decimos que dicho elemento es
// de tipo TextField mediante as [tipo]
this.label_txt = getChildByName("label_txt") as TextField;
label_txt.text = _label;
}

// Metodo para configurar los eventos asociados al boton
private function setEvents():void {

// asociamos un metodo al evento de pulsar el raton
addEventListener(MouseEvent.CLICK, click_handler);

// asociamos un metodo al evento de pasar por encima con el raton
addEventListener(MouseEvent.MOUSE_OVER, over_handler);

// asociamos un metodo al evento salir del boton con el raton
addEventListener(MouseEvent.MOUSE_OUT, out_handler);

}

private function click_handler(event:MouseEvent):void {
trace('click',this.label_txt.text, this.idBoton);
}

private function over_handler(event:MouseEvent):void {
this.label_txt.textColor = 0x000000;
}

private function out_handler(event:MouseEvent):void {
this.label_txt.textColor = 0x999999;
}

}

}
__________________
www.davidhs.es diseño Grafico y Web