Foros del Web » Creando para Internet » Flash y Actionscript »

Remplazar Componente Button por Boton Movieclip

Estas en el tema de Remplazar Componente Button por Boton Movieclip en el foro de Flash y Actionscript en Foros del Web. Estimados, llevo días machacandome la cabeza con esto, tengo una galería que funciona de maravillas, (el código lo baje de la web) carga tumbs e ...
  #1 (permalink)  
Antiguo 29/03/2011, 12:06
 
Fecha de Ingreso: noviembre-2007
Mensajes: 36
Antigüedad: 17 años
Puntos: 0
Pregunta Remplazar Componente Button por Boton Movieclip

Estimados, llevo días machacandome la cabeza con esto, tengo una galería que funciona de maravillas, (el código lo baje de la web) carga tumbs e imágenes desde carpetas sin necesidad de un XML o un TXT, y ahora me surge la necesidad de cambiarle los botones que pasan las imágenes que son 4 componentes buttons que son poco personalisables, la idea es poner botones con animación, pongo el codigo:
Código:
//Importamos las clases
import mx.containers.ScrollPane
import mx.controls.ProgressBar
import mx.controls.Loader

//Declaramos variables
var imagenes_lv:LoadVars = new LoadVars();
var i:Number = new Number(1);
var x:Number = new Number(0);
var y:Number = new Number(0);
var nFot:Number = new Number(1);
var fotAct:Number = new Number(0);
var nPag:Number = new Number(1);
var elTope:Number = new Number(1);
var final:Boolean = new Boolean(false);
var alClicar:Object = new Object();
var alCargar:Object = new Object();
var cargando:Object = new Object();

//Atacheamos los objetos que necesitamos
attachMovie("ProgressBar", "barra", 9998);
attachMovie("ProgressBar", "barraThumbs", 9999);
//Puedes cambiar la forma de mostrar las imágenes, poniendo en vez de un Loader un ScrollPane
//No olvides añadirlo a tu biblioteca
attachMovie("Loader", "imgGrande", _root.getNextHighestDepth());
//attachMovie("ScrollPane", "imgGrande", _root.getNextHighestDepth());

//Empezamos cargando por la primera imagen
imagenes_lv.dirurl = "motos_modelosTB/" + i + ".jpg";
imagenes_lv.parent = this;
imagenes_lv.load(imagenes_lv.dirurl);

//Propiedades del Loader/ScrollPane
imgGrande.setSize(570, 350);
imgGrande.move(232, 4);
imgGrande.addEventListener("complete", alCargar);
imgGrande.addEventListener("progress", cargando);

//Propiedades de la barra de carga
barra._visible = false;
barra.move(216, 141);
barra.label = "Cargando %3%";
barra.mode = "manual";

//Propiedades de la barra de carga de los thumbnails
barraThumbs._visible = false;
barraThumbs.setSize(125, 44);
barraThumbs.move(85, 313);
barraThumbs.indeterminate = true;
barraThumbs.labelPlacement = "up";


//******************************** FUNCIONES ***********************************//
//Función para ir pasando de imagen en imagen
function siguienteImg (i){
	barraThumbs._visible = true;
	barraThumbs.label = "Cargando imagen " + (i-1);
	if (i < 10){
		imagenes_lv.dirurl = "motos_modelosTB/" + i + ".jpg";
		imagenes_lv.load(imagenes_lv.dirurl);
	}
	else if (i >= 10){
		imagenes_lv.dirurl = "motos_modelosTB/" + i + ".jpg";
		imagenes_lv.load(imagenes_lv.dirurl);
	}
}

//Función para hacer grande la imagen
function agrandarImg(id){
	//Asignamos que vamos a cargar y ponemos la barra de preload
	if (id < 10){
		imgGrande.contentPath = "motos_modelos/" + id + ".jpg";
	}
	else if (id >= 10){
		imgGrande.contentPath = "motos_modelos/" + id + ".jpg";
	}
	//Mostramos la barra de carga
	barra._visible = true;
	
	fotAct = id;
}

//Función para pasar de página hacia adelante
function paginaAde(){
	//Quitamos las imagenes anteriores
	for (n=1; n<i; n++){
		removeMovieClip(["loader"+n]);
	}
	
	//Inicializamos variables y nos situamos en la page siguiente
	nPag++;
	nFot = 1;
	x = 0;
	y = 0;
	
	siguienteImg(i);
}

//Función para pasar de página hacia atrás
function paginaAtr(){
	//Quitamos las imagenes anteriores
	for (n=1; n<i; n++){
		removeMovieClip(["loader"+n]);
	}
	
	//Inicializamos variables y nos situamos en la page anterior
	nPag--;
	nFot = 1;
	x = 0;
	y = 0;
	//El índice de la imagen es igual a:
	//12 --> Número de imágenes mostradas
	//(nPag-1) --> multiplicado por el número de página actual - 1
	//más 1, que dará como resultado
	//i = (12 * (1-1)) + 1 --> 1 [Nos situamos en imagen 1 si la página es la 1]
	//i = (12 * (2-1)) + 1 --> 13 [Nos situamos en imagen 13 si la página es la 2]
	//i = (12 * (3-1)) + 1 --> 25 [Nos situamos en imagen 25 si la página es la 3]
	//etc...
	i = (6 * (nPag-1)) + 1;
	
	siguienteImg(i);
}

//********************************** EVENTOS *********************************//
//Cuando se ha cargado del todo la imagen
alCargar.complete = function(objeto){
	barra._visible = false;
	imgGrande.setSize(398, 299);
	imgGrande.refreshPane();
}

//Monitorizamos la descarga de la imagen
cargando.progress = function(){
	barra.setProgress(imgGrande.getBytesLoaded(), imgGrande.getBytesTotal());
}

//Cargamos las thumbnails
imagenes_lv.onLoad = function() {
	if (imagenes_lv.loaded == true) {
		if (nFot < 7){ //cantidad de imagenes a mostrar -1
			//Existe la imagen
			attachMovie("Loader", "loader" + i, i);
			eval("loader"+i).setSize(48, 36);
			eval("loader"+i).move((60 * x + 15), (50 * y + 5));
			eval("loader"+i).id = i;
			
			trace(this.dirurl + " / " + eval("loader"+i));
			
			eval("loader"+i).contentPath = this.dirurl;
			
			//Cargamos la imagen en grande y le pasamos el id de la thumbnail
			eval("loader"+i).onPress = function(){
				agrandarImg(this.id);
			}
			
			i++;
			nFot++;
			//Si no hemos llegado al final seguimos sumando para llegar al tope
			if (final == false){
				elTope++;
			}
			
			//Posiciones de las imagenes
			x++;
			if (x > 0){ //cantidad de imagenes por fila + 1
				y++;
				x = 0;
			}
			
			siguienteImg(i);
		}
		else{
			//Cuando hemos cargado todas las thumbs quitamos la barra de carga
			barraThumbs._visible = false;
		}
	}
	else{
		//Si llegamos al final, restamos uno al tope para que no se puedan seguir cargando
		//imagenes
		if (final == false){
			elTope--;
		}
		final = true;
		barraThumbs._visible = false;
	}
}

alClicar.click = function(objeto){
	if (objeto.target == sigPage_btn){
		//Si la imagen actual es menor o igual que el tope, podemos seguir avanzando
		if (i <= elTope){
			paginaAde();
		}
	}
	else if (objeto.target == antPage_btn){
		if (nPag > 1){
			paginaAtr();
		}
	}
	else if(objeto.target == sigImg_btn){
		//Mientras no lleguemos a la última foto podemos seguir pasando
		trace(fotAct + " < " + elTope);
		if (fotAct < elTope){
			fotAct++;
			agrandarImg(fotAct);
		}
		
		//Desactivamos el botón si hemos llegado al final
		if (fotAct == elTope && final == true){
			objeto.target.enabled = false;
		}
		//Activamos el botón de siguiente imagen
		antImg_btn.enabled = true;
		
		//Cambiamos de página si ya hemos visto todas las fotos de la pagina actual
		if (fotAct == (nPag * 6 + 1)){
			paginaAde();
		}
	}
	else if(objeto.target == antImg_btn){
		if (fotAct > 1){
			fotAct--;
			agrandarImg(fotAct);
		}
		
		//Desactivamos el botón si hemos llegado al principio
		if (fotAct == 1){
			objeto.target.enabled = false;
		}
		//Activamos el botón de siguiente imagen
		sigImg_btn.enabled = true;
		
		//Cambiamos de página si ya hemos visto todas las fotos de la pagina actual
		if (fotAct == (nPag-1) * 6){
			paginaAtr();
		}
	}
}

//******************************** LISTENERS ***********************************//

sigPage_btn.addEventListener("click", alClicar);
antPage_btn.addEventListener("click", alClicar);
sigImg_btn.addEventListener("click", alClicar);
antImg_btn.addEventListener("click", alClicar);
el tema es que los botones no tienen acciones designadas (on(release) etc), sino que el código base tiene unos Listeneres que esperan la acción del componente button y ejecuta el avance o el retroceso de las imágenes.
Ya probé creando un botón animado, poniendo el mismo nombre de instancia (sigImg_btn o antImg_btn) pero no logro que listener oiga el click de mi botón, es mas, me pasa lo mismo con en el progressbar, tampoco pude hacer funcionar uno personalizado.
Si alguien me puede orientar un poco se los voy agradecer mucho.
  #2 (permalink)  
Antiguo 29/03/2011, 13:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 36
Antigüedad: 17 años
Puntos: 0
Respuesta: Remplazar Componente Button por Boton Movieclip

Bueno, al final resolví el tema de los botones, el addEventListener en AS2 solo escucha a los componentes, pero recontra releyendo el código me cayo la ficha que a los botones le podía poner la acción que le asigna el listener a cada componente button y listongo:

para avanzar al boton hay que ponerle:
Código:
on(release) {
	trace(fotAct + " < " + elTope);
		if (fotAct < elTope){
			fotAct++;
			agrandarImg(fotAct);
		}
}
y para retroceder

Código:
on(release) {
	if (fotAct > 1){
			fotAct--;
			agrandarImg(fotAct);
		}
}
si alguien quiere la galería dinámica, puedo subir el fla.

Ahora voy a cranear el tema del ProgressBar

Exitosssss

Etiquetas: as2, componente, dinamica, galeria, txt, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:26.