Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/06/2008, 10:26
Farinha
 
Fecha de Ingreso: junio-2008
Mensajes: 1
Antigüedad: 15 años, 9 meses
Puntos: 0
Profundidad MC creado dinámicamente

Hola a todos, y gracias de antemano por interesaros por mi problema. Al turrón:

Estoy tratando de adaptar una galería de fotos hecha previamente para que tenga los bordes redondeados. La galería lee un xml que tiene la ubicación de las fotos y va creando MC que hacen un efecto de transición entre una foto y otra. Esto funciona perfecto.
Yo le he añadido una capa de máscara para hacer el efecto de redondeo de las esquinas, y situé las capas que ya tenía dentro de la máscara (o debajo, según se mire).... y aquí es dónde viene mi problema: al principio carga un logo, y después empieza con las fotos que saca del xml. El tema es que cuando muestra la primera foto la pone por encima de la máscara, con lo que mi efecto de redondeo se va a tomar ....... me entendéis, no?

Sólo tengo un MC creado, que se llama "fondo".

Sospecho que tiene que ver con la profundidad, con la función getNextHighestDepth(), pero no consigo modificar esto para que siempre salga por debajo de la máscara.

Ahí va el código que va cargando las imagenes, seguramente no es muy elegante, pero el Action Script no es lo mio... de momento... ;)
Muchas gracias a l@s que tengáis paciencia para leerlo:

Código:
var intervalo = 0;


// función inicial. Creamos todas las variables necesarias y las inicializamos, así 
//como también los movieclips contenedores.
// También creamos un mcvación inicial para cargar la primera imagen.
function init():Void {
	_root.fondo.cliLogo._visible = true;
	prof = _root.getNextHighestDepth();
	vacio = _root.createEmptyMovieClip("mc_vacio", prof);
	prof = _root.getNextHighestDepth();
	loop = _root.createEmptyMovieClip("mc_loop_carga", prof);
	prof = _root.getNextHighestDepth();
	vacio.duplicateMovieClip("v"+prof, prof);
	_global.foto_vieja;
	_global.foto_nueva;
	_global.moviendose = false;
	//
	
	cambiaFoto(galeria[0].jpg);
}

function cambiaFoto(foto){
	cargaFoto(foto);
	
	if (actual<galeria.length-1 && moviendose == false) {
		actual++;
		moviendose = true;
	}else{
		//_root.gotoAndPlay(2);
		actual = 0;
		moviendose = true;
	}
		clearInterval(intervalo);
		intervalo = setInterval(this, "cambiaFoto", galeria[actual].tiempo, galeria[actual].jpg);
}

// función para precargar la foto siguiente en segundo plano. 
// Cuando termina lanza un fade out de la antigua.
function cargaFoto(jpg):Void {
	foto_vieja = _root["v"+prof];
	prof = _root.getNextHighestDepth();
	var mc = vacio.duplicateMovieClip("v"+prof, prof);
	foto_nueva = mc;
	mc._x = vacio._x;
	mc._y = vacio._y;
	mc.loadMovie(jpg);
	mc._alpha = 0;
	preloader._visible = 1;
	preloader.barra._xscale = 0;
	loop.onEnterFrame = function() {
		tot = mc.getBytesTotal();
		car = mc.getBytesLoaded();
		por = Math.round(car*100/tot);
		if (!isNaN(por)) {
			preloader.barra._xscale = por;
		}
		if (tot == car && car>0) {
			preloader._visible = 0;
			delete loop.onEnterFrame;
			fade("out", foto_vieja);
		}
	};
}

// función de efecto de fade. Utiliza el objeto colo y se lo aplica al clip que se le envía.
// Al finalizar, si la dirección es out elimina el clip actual y redimensiona el fondo;
// si la dirección es in, funde la foto nueva desde el blanco y para la animación general
function fade(dir, clip) {
	var myColor = new Color(clip);
	var myColorTransform = new Object();
	var colorVar:Number = dir == "in" ? 255 : 0;
	clip.onEnterFrame = function() {
		if (dir == "in") {
			if (colorVar>0) {
				colorVar -= 10;					
			} else {
				_root.fondo.cliLogo._visible = false;
				
				moviendose = false;
				delete this.onEnterFrame;
			}
		} else {
			if (colorVar<255) {
				colorVar += 10;
			} else {
				removeMovieClip(this);
				redimensiona(fondo, foto_nueva._width+20, foto_nueva._height+20, 5);
				delete this.onEnterFrame;
			}
		}
		myColorTransform = {ra:'100', rb:colorVar, ga:'100', gb:colorVar, ba:'100', bb:colorVar, aa:'100', ab:'0'};
		myColor.setTransform(myColorTransform);
	};
}
//
// función para redimensionar el clip blanco de fondo
function redimensiona(clip, w, h, acc):Void {
	clip.onEnterFrame = function() {
		this._width = this._width+((w-this._width)/acc);
		this._height = this._height+((h-this._height)/acc);
		if (Math.round(this._height) == Math.round(h) && Math.round(this._width) == Math.round(w)) {
			delete clip.onEnterFrame;
			this._width = w;
			this._height = h;			
			fade("in", foto_nueva);
		}
	};
}

//
// función que devuelve un número entero con un 0 delante si tiene menos de dos dígitos
function leading(n:Number):String {
	if (n<10) {
		return "0"+n.toString();
	} else {
		return n.toString();
	}
}

// paramos la animación
stop();
// 
// inicializamos la aplicación
init();