17 junio 2010

Galeria de imágenes con XML en Flash CS4 y Actioscript 2.0


DESCARGAR EJEMPLO :
GALERIA DE IMAGENES + XML +FLASH CS4
10 MB
 <----------------------
En este tutorial aprenderemos a crear una simple pero elegante galeria de imágenes dinámica con Adobe Flash, haciendo uso de Actionscript 2 y XML.

Características:
  • Carga las imagenes desde un archivo XML
  • Botones Prev y Next
  • Muestra título de la foto en la parte inferior
  • Transición de las imágenes en el cambio de foto.
  • Sonido al cambio de las imágenes


Creamos un nuevo archivo flash:

Abrimos Adobe Flash CS3 o CS4  clic en  nuevo Archivo de Flash (AS 2.0), y creamos 4 capas lo renombramos con: "botones,titulos,fondo,actions" de preferencia.


Creamos las capas y los movieclips:

En la capa "fondo" dibujamos un rectángulo de 500 x 309 pixeles,borramos su fondo si lo deseamos y nos quedamos con el borde. Convertimos a este rectángulo en un clip de pelicula presionado F8 lo ponemos el nombre" folder". Después presionamos sobre el clip de película y colocamos el nombre de instacia como "folder".

De igual manera para en contenedor de los títulos dibujamos un rectagulo en la capa "titulos" , lo convertimos en clip de película y lo ponemos como nombre de instancia "cuadro_titulo", demos en él doble click para ir al fondo del movieclip y trazamos un campo de texo dinamico poniendole como instancia "txt_titulo".


Dibujamos los botones:

Finalmente dibujamos 2 triangulos en la capa botones a tu gusto y lo convertimos en simbolo presionado F8 elegimos "boton". Lo nombres de instancias deben ser "prev "y "next" respectivamente. Con un poco de filtros se veria así:

Lo del archivo XML
Creamos un documento xml con cualquier editor, ejemplo Notepad,Dreamweaver,etc. Con esta estructura y lo guardamos conmo imagenes.xml.
 
<?xml version="1.0" encoding="utf-8"?>
<galeria>
 <imagen url="images/futbol.jpg" titulo="Un vector inspirado en un futbolista" />
 <imagen url="images/automovil.jpg" titulo="Elegante automovil amarillo" />
 <imagen url="images/lago.jpg" titulo="Un lindo lago en el campo" />
 <imagen url="images/phoenix.jpg" titulo="Vector con colores muy brillantes" />
 <imagen url="images/vectorgirl.jpg" titulo="Otra creacion de NdesignStudio" />
 <imagen url="images/verde.jpg" titulo="Luz de la maniana en las plantas" />
</galeria>

Atributo Url: Es la ruta de la imagen PNG,JPG,GIF
Atributo Titulo: Pones el titulo o decripción de tu imágen
Programemos un poquito:
En la capa actions vamos a colocar los siguientes codigos Actionscript:
 
//importamos las clases para transicion----
 
import mx.transitions.Tween;
import mx.transitions.easing.*;
 
//cremos los arrays para almacenar datos del xml
var urls:Array = new Array();
var titulos:Array = new Array();
var current:Number;
//Establecer tamaño del movieclip folder
holder._width = 501;
holder._height = 310; 
Aquí parseamos el XML de la forma mas simple:


//----------------------El XML---------------------
var x:XML = new XML();
x.ignoreWhite = true;
x.onLoad = function(success) { 
var photos:Array = this.firstChild.childNodes; 
   for(i=0;i<photos.length;i++) {  
      urls.push(photos[i].attributes.url);  
      titulos.push(photos[i].attributes.titulo); 
   } 
holder.loadMovie(urls[0]); 
cuadro_titulo.txt_titulo.text = titulos[0]; 
current = 0;
}
x.load("imagenes.xml");
Para los botones anterior y siguiente:
 
 //------------PREV Y NEXT-------------
 
previous.onRelease = function() {
 if(current > 0) {
  current--;
  holder.loadMovie(urls[current]);
  cuadro_titulo.txt_titulo.text = titulos[current];
  alphaTw = new Tween(holder, "_alpha", Regular.easeOut, 0, 100, 7, false);
 }
}
 
next.onRelease = function() {
 if(current < urls.length-1) {
  current++;
     holder.loadMovie(urls[current]);
     cuadro_titulo.txt_titulo.text = titulos[current];
  alphaTw = new Tween(holder, "_alpha", Regular.easeOut, 0, 100, 7, false);
 }
 
}
Y por últmo para aclarar y opacar el movieclip del título al pasar el mouse sobre él ,aplicamos un nuevo Tween:
 
//Efecto cuadro del titulo
cuadro_titulo.onRollOver = function(){
 alphaTw = new Tween(cuadro_titulo, "_alpha", Regular.easeIn, 5, 100, 7, false);
 }
cuadro_titulo.onRollOut = function(){
 alphaTw = new Tween(cuadro_titulo, "_alpha", Regular.easeOut, 100, 20, 7, false);
 }
Solo falta un Control + Enter para probar nuestra galería de fotos.

 DEMO | DESCARGAR  

Nota: En el demo no se nota bién la transición entre las fotos debido a que están alojados en googlepages.


19 comentarios:

Anónimo dijo...

Me perece excelente el tutorial que muestras en tu blog, estaré pendiente de otros nuevos tutos, te he agregado a mis favoritos, exito.

4 SOLOS BIEN SOLOS dijo...

Hola Neysitc,

he seguido todas tus instrucciones paso a paso, pero no me funciona. En el previuw no se me cargan las imágenes, ¿sabrías por qué?

Gracias de antemano!

Anónimo dijo...

Hola. No sabes cómo me ha ayudado tu tutorial. Cómo se hace una precarga para las imágenes?
Muchas gracias.

Anónimo dijo...

me he suscrito a tu blog pero aparezco como anónimo y no he recibido ningún mail....

Anónimo dijo...

oe muy buen tuto y ya me salio XD pero t tengo una pregunta como le ago para ponerlo por ejemplo en mi web tengo k subir en swf y xml o como le ago?

Anónimo dijo...

muy buen tut pero como ago para subir la galeria a internet esk eso nose suvi el archivo swf y me aparese sin las imagens luego subi el xml pero nd me podrias ayudar?

Neysi dijo...

Hola. Discupen por tardar en responder.

Para subir la Galeria crea un directorio en tu hosting "galeria". por ejemplo www.midominio.com/galeria, en esa carpeta sube tal y como esta en el ejemplo todos los archivos. "el XML, SWF,la cartpeta Images con sus respectivas fotografias y el Index.html el cual es el ejemplo".

Suerte...

Anónimo dijo...

excelentes tutoriales, te felicito por tu blog es muy interesante, espero que sigas posteando mas, animo!!

Edgar dijo...

gracias por el tutorial solo una pregunta cómo le hago para poner la animación en un aparatado dentro de mi pagina web sin que tenga que trasladarse a otra pestaña si me pueden ayudar se lo agradecería

Anónimo dijo...

Muy bueno el tutorial, pero cuando lo hago me muestra este error "var x:XML = new XML();
"

Anónimo dijo...

muy bueno!!! me gusto, no sabe alguno como es el actionscript 2.0 para que se reproduscan automaticas? si alquien lo sabe porfavor me lo puede mandar a mi mail es "abelzeballo@gmail.com" gracias!

Anónimo dijo...

Neysi,

me cargan solamente los titulos, las fotos no. ya revise los nombres y posibles errores de ortografia, pero nada...hice todo como lo explicaste, ¿que puede llegar a ser?.

saludos y muchas gracias,
Laila

Shaka dijo...

Hola que tal!, muy bueno el tutorial, gracias por compartirlo, tengo una consulta.

Lo pude echar a andar en un sitio que hago, pero tengo un pequeño problema

las fotos cargan bien, siguiendo el tamaño de las imagenes de muestra, pero resulta que tengo unas imagenes que son mas angostas y mas altas, y claro lo dejo a un tamaño visible comodamente, pero la imagen me carga hacia el lado izq, habra una manera de hacer que quede centrada?

de antemano muchas gracias!

Anónimo dijo...

Holaa.-
muy bueno el tutorial.- muy claro...

solo tengo un problemita con la galeria.. que es el que tiene "shaka", tengo las imagenes 1 pixel menos de ancho y alto que el cuadrado central donde se cargan las imagenes..y cuando reprodusco el flash la imagen se expande hacia la derecha, y la imagen se ve mal, siendo que es chica la imagen para que haga eso..
como hago para que no se expanda y quede bien centrada?

Virgo dijo...

hola antes que nada muchas grcias por tu ayuda me parecio muy bueno tu tutorial, tengo una duda la galeria me funciona muybien en el explorer y google cromo, pero en mozilla firefox y safari no se ve la galeria me podrias ayudar.. gracias por tu respuesta

Fernando dijo...

Hola, alguien puede ayudarme e indicarme como puedo hacer una galería como la que tiene esta web: www.raulhiguera.com, alli buscan y le dan click por ejemplo en retrato, alli sale la galería, quiero hacerla exactamente asi.

Les agradecería mucho si pueden ayudarme con eso.

courier dijo...

hola, he estado visitando tu pagina y tienes contenido muy interesante, sigue posteando asi, me encantará volver, saludos!

Anónimo dijo...

Buenas tardes, una consulta. Quizas tenga que realizarla en otro foro, aun no se. Pero me gustaria que me ayudaran en esto. Necesito abrir una galeria realizada con este mismo metodo, pero abrirla dentro de otro swf. O explicado de otra manera, hice un cd interactivo que tiene una galeria de imágenes hecha con este mismo sistema, pero no se como llamar desde el swf (cd interactivo) esa galeria externa.
Graciassss

cesar dijo...

hola soy César respondiendo al pata de arriba, solo debes darle la ruta exacta dentro de tus archivos del cd.

si a alguien lo desea dejo un ejemplo de como haría yo pero en as3:

//cargador_mc es el mc de la galeria
//siguiente_btn es el boton next
//anterior_btn es el boton prev
var miXML:XML;
var rutaXML:URLRequest=new URLRequest("galeria.xml");
var loaderXML:URLLoader=new URLLoader();

//var botones=Array(siguiente_btn,anterior_btn)
//este array contiene a los movieclip para bloquearlos mientras va cargandom cada im
cargaXML();
var numIMG:int=0;
var imgACT:int=0;

function cargaXML(){
loaderXML.load(rutaXML);
loaderXML.addEventListener(Event.COMPLETE,mostrarDatos)
}
function mostrarDatos(e:Event){
miXML=new XML(e.target.data);
numIMG=miXML.img.length() -1;
//numIMG = cantidad de nodos IMG de mi galeria.xml
creandoGaleria();
}
function creandoGaleria(){
var cargadorSimple:Loader=new Loader;
cargadorSimple.load(new URLRequest(miXML.img[0]))
// creamod un loader para carga la ruta de la imagen
//cargamos la priemra imagen por defecto
cargador_mc.addChild(cargadorSimple)
}

siguiente_btn.addEventListener(MouseEvent.CLICK,NEXT)
function NEXT(e:MouseEvent){
imgACT++
trace(cargador_mc.numChildren)
if(imgACT==numIMG){
imgACT=0;
}


if(cargador_mc.numChildren > 2){
cargador_mc.removeChildAt(1);
}
//creamos un nuevo loader para cargar las demas imagenes.
// El echo de crear un nuevo loader es proque sera un nuevo objeto y entonces
// el cargado_mc tendra un hijo más

var cargadorSimple:Loader=new Loader;
cargadorSimple.load(new URLRequest(miXML.img[imgACT]))
cargador_mc.addChild(cargadorSimple)
}

anterior_btn.addEventListener(MouseEvent.CLICK,PREV)
function PREV(e:MouseEvent){
imgACT--;
if(imgACT < 0){
imgACT=numIMG;
}
if(cargador_mc.numChildren > 2){
cargador_mc.removeChildAt(1);
}
var cargadorSimple:Loader=new Loader;
cargadorSimple.load(new URLRequest(miXML.img[imgACT]))
cargador_mc.addChild(cargadorSimple)
}

y este es el archivo xml galeria.xml



1.jpg
2.jpg
3.jpg
4.jpg


remplazar en el nodo del xml que dice "xD" por img
1.jpg, 2.jpg son la ruta de los arhivos

Publicar un comentario en la entrada