Aca te dejo el codigo final, solo necesitas tener los botones de btn_adelante btn_siguiente en el escenario y listo.
Código ActionScript :
stop();
import mx.transitions.Tween;
import mx.transitions.easing.*;
//-- Variables iniciales --//
var frames:Number = 24;//Numero de frames que se vera cada diapositiva
var sld_x:Number = 10;//Posicion en X del Slide
var sld_y:Number = 10;//Posicion en Y del Slide
var sld_w:Number = Stage.width - 20;//Ancho del Slide
var sld_h:Number = Stage.height - 20;// Alto del Slide
var sld_mask:Boolean = true;// Alto del Slide
var aleatorio:Boolean = false;//Indica si es aleatorio
var ciclico:Boolean = true;//Indica si se tiene repite al llegar al final
var transicion:String = "fade";//Tipos de transicion
/** transicion
*
* arriba .- movimiento hacia arriba
* abajo .- movimiento hacia abajo
* izquierda .- movimiento haca la izquierda
* derecha .- movimiento hacia la derecha
* zoomv .- amplificado verticalmente
* zoomh .- amplificado horizontalmente
* zoom .- amplificado
* fade .- desvanecido
* none .- nunguna animacion
*
**/
var movimiento:String = "remarcado";//Tipos de movimiento
/** movimiento
*
* retroceso
* rebote
* elastico
* remarcado
* normal
*
**/
//-- Varialbles internas --//
// cargoDiapositivas .- array de los MCs que contendran las diapositivas
var cargoDiapositivas:Array;
// index .- indica la diapositiva actual
var index:Number = -1;
// loading .- indica el numero de recusos cargados
var loading:Number = 0;
// cargador .- se usara para cargar las diapositivas
var cargador:MovieClipLoader = new MovieClipLoader();
cargador.addListener(this);
// slideshow .- MC que contendra todo el slideshow
var slideshow:MovieClip;
//-- Diapositivas a cargar --//
var misDiapositivas:Array = new Array();
for (var i:Number = 1; i<=4; i++) {
misDiapositivas.push("img"+i+".jpg");
}
cargarDiapositivas();
//-- Clips de trabajo y Carga --//
function cargarDiapositivas( Void ):Void
{
this.slideshow = this.createEmptyMovieClip( "slideshow" , this.getNextHighestDepth() );
//Creamos el clip que contendra los limites del slideshow
this.slideshow.createEmptyMovieClip("bound_mc", 0);
this.setArea( this.slideshow.bound_mc, this.sld_w, this.sld_h );
//Enmascaramos el slideshow
this.slideshow.setMask( this.sld_mask ? this.slideshow.bound_mc : null );
//Posicionamos
this.slideshow._x = this.sld_x;
this.slideshow._y = this.sld_y;
//Variables inciales
this.slideshow.owner = this;
this.slideshow.count = this.frames;
this.cargoDiapositivas = new Array();
for (var i:Number = 0, l:Number = this.misDiapositivas.length; i < l; i++)
{
//creamos un MC dentro de slideshow y lo colocamos en el array
this.cargoDiapositivas[i] = this.slideshow.createEmptyMovieClip( "slide_" + i , i + 1);
//creamos un MC dentro del MC previamente creado, en el cargamos la diapositiva
this.cargador.loadClip(this.misDiapositivas[i], this.cargoDiapositivas[i].createEmptyMovieClip("clip", 0));
}
//Creamos un TextField para mostrar mensajes
this.slideshow.createTextField("texto_txt", this.slideshow.getNextHighestDepth(), this.sld_w / 2 - 100, this.sld_h - 22, 200, 22);
//Le damos formato al texto
var format:TextFormat = new TextFormat();
format.align = "center"
format.bold = true;
format.font = "Arial";
format.color = 0x888888;
format.size = 11;
this.slideshow.texto_txt.setNewTextFormat( format );
this.slideshow.texto_txt.selectable = false;
//Colocamos el mensaje de carga
this.slideshow.texto_txt.text = "Cargando...";
}
//Funcion que se ejecutara cuando esten cargados todos las diapositivas
function startSlideShow( Void ):Void
{
btn_anterior.owner = this;
btn_anterior.onRelease = function()
{
this.owner.cambiar( -1 );
};
btn_siguiente.owner = this;
btn_siguiente.onRelease = function()
{
this.owner.cambiar( +1 );
}
cambiar( +1 );
}
//-- Eventos del MovieClipLoader --//
function onLoadInit( target:MovieClip ):Void
{
//Hacemos invisible
target._parent._visible = false;
//Centramos
target._parent._x = target._parent._parent.bound_mc._width / 2;
target._parent._y = target._parent._parent.bound_mc._height / 2;
target._x = target._width / -2;
target._y = target._height / -2;
//Si ya se cargo todo, podemos inciar
if( (++loading) >= cargoDiapositivas.length )
{
startSlideShow();
}
}
//-- cambiar --//
function cambiar( aux:Number ):Void
{
var actual = index;
index += aux;
if( index >= cargoDiapositivas.length )//Si llegamos al final
{
if( ciclico )//Si es ciclico
{
index = 0;//regrsamos el index al incio
}
}
else if( index < 0 )
{
if( ciclico )//Si es ciclico
{
index = cargoDiapositivas.length - 1;//regrsamos el index al incio
}
}
//Aplicamos la transicion
interpolar( cargoDiapositivas[ actual ], cargoDiapositivas[ index ] );
btn_siguiente.enabled = false;
btn_anterior.enabled = false;
btn_anterior.func = btn_siguiente.func = function( Void ){ clearInterval(this.inter); this.enabled = true; }
btn_siguiente.inter = setInterval(btn_siguiente, "func", 1500);
btn_anterior.inter = setInterval(btn_anterior, "func", 1500);
//Trace
this.slideshow.texto_txt.text = (index + 1) +" de "+ cargoDiapositivas.length;
}
//-- Efectos --//
function interpolar( ini:MovieClip, fin:MovieClip):Void
{
//Colocamos a "fin" en el nivel mas alto
fin.swapDepths(cargoDiapositivas.length);
// ease .- variable que contiene la funcion de movimiento
var ease:Function = StringToEasing( movimiento );
//Elegimos la transicion
switch(transicion)
{
case "arriba":
CambioArr( ini, fin, ease );
break;
case "abajo":
CambioAbj( ini, fin, ease );
break;
case "izquierda":
CambioIzq( ini, fin, ease );
break;
case "derecha":
CambioDer( ini, fin, ease );
break;
case "zoomv":
CambioZoomH( ini, fin, ease );
break;
case "zoomh":
CambioZoomV( ini, fin, ease );
break;
case "zoom":
CambioZoom( ini, fin, ease );
break;
case "fade":
CambioFade( ini, fin, ease );
break;
//Si no hay ninguna transicion
case "none": default:
fin._visible = true;
ini._visible = false;
break;
}
}
//desvanecimiento
function CambioFade( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_alpha", ease, 0, 100, 1.5, true);
var aux:Tween = new Tween(ini, "_alpha", ease, 100, 0, 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
//ampliacion
function CambioZoom( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_xscale", ease, 0, 100, 1.5, true);
new Tween(fin, "_yscale", ease, 0, 100, 1.5, true);
new Tween(ini, "_xscale", ease, 100, 0, 1.5, true);
var aux:Tween = new Tween(ini, "_yscale", ease, 100, 0, 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
//ampliacion horizontal
function CambioZoomH( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_yscale", ease, 0, 100, 1.5, true);
var aux:Tween = new Tween(ini, "_yscale", ease, 100, 0, 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
function CambioZoomV( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_xscale", ease, 0, 100, 1.5, true);
var aux:Tween = new Tween(ini, "_xscale", ease, 100, 0, 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
function CambioDer( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_x", ease, fin._width / -2, fin._parent.bound_mc._width / 2, 1.5, true);
var aux:Tween = new Tween(ini, "_x", ease, ini._parent.bound_mc._width / 2, ini._parent.bound_mc._width + (ini._width / 2), 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
function CambioIzq( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_x", ease, fin._parent.bound_mc._width + (fin._width / 2), fin._parent.bound_mc._width / 2, 1.5, true);
var aux:Tween = new Tween(ini, "_x", ease, ini._parent.bound_mc._width / 2, ini._width / -2, 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
function CambioArr( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_y", ease, fin._parent.bound_mc._height + (fin._height / 2), fin._parent.bound_mc._height / 2, 1.5, true);
var aux:Tween = new Tween(ini, "_y", ease, ini._parent.bound_mc._height / 2, ini._height / -2, 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
function CambioAbj( ini:MovieClip, fin:MovieClip, ease:Function ):Void
{
//Hacemos visibles los clips
fin._visible = ini._visible = true;
//Generamos las Tween
new Tween(fin, "_y", ease, fin._height / -2, fin._parent.bound_mc._height / 2, 1.5, true);
var aux:Tween = new Tween(ini, "_y", ease, ini._parent.bound_mc._height / 2, ini._parent.bound_mc._height + (ini._height / 2), 1.5, true);
//Al finalizar la Tween
aux.onMotionFinished = function( o )
{
//Colocamos invisible el movieclip ini
o.obj._visible = false;
}
}
//-- Utilerias --//
//Genera numeros aleatorios de 0 a sup, excluye a norep
function rand( sup:Number, norep:Number ):Number
{
norep = ( norep == undefined ) ? -1 : norep;
var aux:Number;
do
{
aux = Math.floor(Math.random() * sup);
}
while( aux == norep && sup > 1);
return aux;
}
//Dibuja un cuadrado en clip, de ancho w y alto h
function setArea( clip:MovieClip, w:Number, h:Number, color:Number, alpha:Number ):Void
{
//Dibujamos un cuadrado
clip.clear();
clip.beginFill( color?color:0, alpha?alpha:0 );
clip.moveTo( 0, 0 );
clip.lineTo( w, 0 );
clip.lineTo( w, h );
clip.lineTo( 0, h );
clip.endFill();
}
//toma una cadena "aceleracion" y regresa una funcion de easing
function StringToEasing( aceleracion:String ):Function
{
switch( aceleracion )
{
case "retroceso":
return Back.easeOut;
break;
case "rebote":
return Bounce.easeOut;
break;
case "elastico":
return Elastic.easeOut;
break;
case "remarcado":
return Strong.easeOut;
break;
case "normal": default:
return Regular.easeOut;
break;
}
}