Comunidad de diseño web y desarrollo en internet online

Snippet AS2 SlideShow Transicion XML

Citar            
MensajeEscrito el 18 Feb 2009 06:43 am
NOTA: No se que tan util le pueda ser a alguien esto pues considero que AS2 esta dando sus ultimas pataditas, asi que como que publicar un tutorial en AS2 no estaria muy bien visto, es por eso que lo pondre en aportes para que los minutos que le dedique a este codigo no se pierdan en el limbo de los post, dudas tecnicas en el foro de AS2 porfavor. Esto es un Snippet.

SlideShow Transicion v1


Un SlideShow es una presentacion o coleccion de diapositivas que se muestran una tras otra, en esta ocasion diseñe un script que puede facilitarte la vida cuando quieres crear un slideshow altamente personalizable; el codigo esta documentado, espero te sea muy util. Suerte.

Caracteristicas



  • Carga de archivos externos
  • Despliegue de las diapositivas de forma secuencial, aleatoria o ciclicamente
  • 8x5 Transiciones

Notacion


"MC"es MovieClip
"Diapositiva" se refiere al recurso que se ha cargado, puede ser una imagen o incluso un swf.

Variables Inciales


Código ActionScript :

//-- 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 = "zoomv";//Tipos de transicion
var movimiento:String = "elastico";//Tipos de movimiento

"sld_x", "sld_y" posicionan el SlideShow en cordenadas x y
"sld_w", "sld_h" es el ancho y alto del slideShow, necesario para centrar las imagenes y enmascararlas
"frames" es el numero de frames que transcurren antes de que cambie de diapositiva, usualmente las peliculas se exportan a 12fps(default), el valor 12 representaria 1 segundo y el valor 24 representa 2 segundos
"sld_mask" es un valor falso/verdadero que indica si se enmascara el slideshow
"aleatorio" es un valor falso/verdadero que indica si se presentan aleatoriamente las diapositivas
"ciclico" es un valor falso/verdadero que indica si se reincia cuando llega a la ultima diapositiva.
"transicion" el efecto de transicion puede estar entre estos valores:

  • 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

"movimiento" el tipo de movimiento que toma la transicion puede estar entre estos valores:

  • retroceso
  • rebote
  • elastico
  • remarcado
  • normal

Diapositivas a cargar


Código ActionScript :

var misDiapositivas:Array = new Array(); 
misDiapositivas.push("IMG/_01.jpg"); 
misDiapositivas.push("IMG/_02.jpg"); 
misDiapositivas.push("IMG/_03.jpg"); 
misDiapositivas.push("IMG/_04.jpg"); 
misDiapositivas.push("IMG/_05.jpg"); 
misDiapositivas.push("IMG/_06.jpg"); 
cargarDiapositivas(); 

Aqui se colocan las rutas de las diapositivas que cargara y presentara el SlideShow.

Codigo completo para CopyPaste


Código ActionScript :

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 = "zoomv";//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 = "elastico";//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();
misDiapositivas.push("IMG/_01.jpg");
misDiapositivas.push("IMG/_02.jpg");
misDiapositivas.push("IMG/_03.jpg");
misDiapositivas.push("IMG/_04.jpg");
misDiapositivas.push("IMG/_05.jpg");
misDiapositivas.push("IMG/_06.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
{
   //Inicia el slideshow
   slideshow.onEnterFrame = function( Void ):Void
   {
      //Evaluamos si han transcurrido los frames indicados
      if ( this.count >= this.owner.frames ) 
      {
         //Si es asi, ejecutamos la funcion "cambiar"
         this.count = 0;
         this.owner.cambiar();
      }
      else this.count++;
   }
}

//-- 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( Void ):Void 
{
   if( aleatorio )//Si es aleatorio
   {
      //Generamos un numero aleatorio
      var randome = rand( cargoDiapositivas.length, index );
      //Aplicamos la transicion
      interpolar( cargoDiapositivas[index], cargoDiapositivas[randome] );
      //Actualizamos el index
      index = randome;
   }
   else
   {
      //Creamos una variable la igualamos con el index y luego incrementamos el index
      var actual = index++;      
      if( index >= cargoDiapositivas.length )//Si llegamos al final
      {
         if( ciclico )//Si es ciclico
         {
            index = 0;//regrsamos el index al incio
         }
         else//Si no
         {
            delete slideshow.onEnterFrame;//Detenemos el slideshow
         }
      }
      //Aplicamos la transicion
      interpolar( cargoDiapositivas[ actual ], cargoDiapositivas[ index ] );
   }
   //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;
   }
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  



Ultima edición por LongeVie el 18 Feb 2009 07:47 am, editado 2 veces

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 18 Feb 2009 07:34 am
Ahora piensas, ¿y donde esta la parte del XML?

SlideShow Transicion XML v1.7a.5b.zg.clab



Mejoras



  • carga las rutas de las diapositivas via XML
  • carga los parametros transicion y movimiento via XML


Codigo


En la version anterior, al slideshow se le llenaba el array "misDiapositivas" con las rutas via codigo; en esta version, dicho array es nutrido via XML, modificando la seccion "Diapositivas a cargar". Como notaran, lo unico que se esta haciendo es implementar la carga de un archivo xml que posteriormente es desglosado para llenar el array que usa nuestro SlideShow.

Código ActionScript :

//-- Diapositivas a cargar --//
var misDiapositivas:Array = new Array();
var lista_xml:XML = new XML();
lista_xml.ignoreWhite = true;
lista_xml.onLoad = function( ok:Boolean ):Void
{  
   if( ok )//Si se cargo correctamente  
   {
      var aux:XMLNode;
      for(var j in lista_xml.firstChild.childNodes)
      {
         switch( lista_xml.firstChild.childNodes[j].nodeName )
         {
            case "transicion":
               transicion = lista_xml.firstChild.childNodes[j].firstChild.nodeValue;
            break;
            case "movimiento":
               movimiento = lista_xml.firstChild.childNodes[j].firstChild.nodeValue;
            break;
            case "diapositivas":
               aux = lista_xml.firstChild.childNodes[j];
            break;
         }
      }
      for( var i:Number = 0, l:Number = aux.childNodes.length; i < l; i++ )
      {
         misDiapositivas.push(aux.childNodes[i].firstChild.nodeValue);
      }      
      cargarDiapositivas();
   }
   else trace("No se pudo cargar el XML");  
};
lista_xml.load("lista.xml");


el XML


Código XML :

<?xml version="1.0" encoding="UTF-8"?>  
<root>
   <transicion>izquierda</transicion>
   <movimiento>rebote</movimiento>
   <diapositivas>
      <diapositiva><![CDATA[IMG/_01.jpg]]></diapositiva>
      <diapositiva><![CDATA[IMG/_02.jpg]]></diapositiva>
      <diapositiva><![CDATA[IMG/_03.jpg]]></diapositiva>
      <diapositiva><![CDATA[IMG/_04.jpg]]></diapositiva>
      <diapositiva><![CDATA[IMG/_05.jpg]]></diapositiva>
      <diapositiva><![CDATA[IMG/_06.jpg]]></diapositiva>
   </diapositivas>
</root>


Suerte.

Ps. Dudas tecnicas en el foro de as2

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 04 Mar 2009 01:43 pm
Me pueden explicar como crear los movie clips necesarios para que funcionen las diapositivas?

el codigo se pega en la linea de tiempo?

Desde ya muchas gracias!

Por tioass

30 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Mar 2009 05:41 pm
tioass Dudas tecnicas en el foro de as2. El codigo aqui descrito se copia y pega en un fotograma, y este automaticamente genera los MovieClips necesarios para animar las diapositivas. Esta documentado paso por paso que es lo que hace cada parte del codigo y donde se tienen que colocar las "urls" de las diapositivas que va a cargar. Si tienes mas dudas, porfavor postealas en el foro de AS2.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 06 Mar 2009 08:41 am
Aqui esta el SlideShow funcionando :wink:



Ps. lo altere un poco para que cargara aleatoriamente cualquiera de estos 3 XMLs 001.xml 002.xml 003.xml con fines solo de que pudieran apreciar las transiciones.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 01 Nov 2009 09:02 pm
Buenas,
Tengo un slide hecho de otra forma, es decir, leo los jpg a lo largo del timeline. Pero los jpg no llegan a cargarse a tiempo en el monento que tiene que aparecer y esto hace que la transición no se haga entre imagen e imagen, sino entre el fondo de la pelicula y 1 de las imagenes... espero estar explicandome bien.

Lo que necesito es ponerle un preload a esta pelicula que me lea de antemano los jpg que se cargar;an externamente...

¿alguien me pude hechar una mano con esto? calculo que estoy cerca con este tutorial, pero el problema es que el as2 no es amigo mio... me manejo siempre con el timeline como buen diseñador estructurado...

Espero encontrar alguien que pueda ayudarme y agradecerle esto.

Saludos.

Por a2design

0 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Feb 2010 04:10 am
gracias por tu aporte esta muy bueno; una consulta se puede hacer que al incio cargue la primera imagen y que mientras se este viendo dicha imagen internamente se este cargando la segunda imagen y cuando esta ya esta cargada se muestre la segunda imagen, y asi sucesivamete; esta inquietud es por que en el caso que se huze imagenes grandes y pesadas

gracias

Por miguel_fox

31 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2010 01:24 am
me gustaría saber si se puede bajar el ejemplo en .fla para así poder integrarlo en la hoja web

Por servanni

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Sep 2010 08:52 pm
En realidad el fla solo contiene todo el código que ves publicado aquí. Es como si crearas un fla en blanco y copiaras y pegaras talcual el código. Recuerda crear el XML, puedes bajarte este como ejemplo:

http://longevie.theninjabunny.com/SlideShow_Transicion_XML/XMLv1.1/001.xml

y tener imagenes. Vamos no cuesta trabajo preparar la escena.

Saludos,

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.