LeoBaraldi – Ejemplos Flash, Ejemplos actionscript, Tutoriales Flash, Tutoriales actionscript, actionscript 3, curso de actionscript

Recursos y ejemplos de actionscript, Flash, AIR, Flex, CSS y HTML. Tutoriales de actionscript 2 y actionscript 3

Cargador en flash de peliculas externas, jpg, gif y png

| 37 Comments

Muchas veces tenemos un desarrollo que debe cargar muchas fotos externas como una galería de fotos o así también hay sitios en Flash que tienen muchas secciones y a la hora de la carga de los swf externos nos encontramos con el problema de como gestionamos las cargas de los mismos incluido a esto el problema de los cargadores, problemas de rutas y mucho mas.

Para ello flash implementa una clase que se llama MovieClipLoader con un sub conjunto de propiedades como detectores para que sepamos en tiempo real que esta sucesiendo con nuestra carga externa y así controlarla como queramos.

Un uso recomendado es cuando tenemos un sitio que tiene mucha secciones y en vez de hacer todas las secciones en un solo swf las hacemos en diferentes y con solo un contenedor en nuestra película principal las otras secciones se irán cargando a medida que el usuario las solicite y nuestras aplicasiones tendrán menos tiempo de espera en su carga.

Actionscript:
  1. //carpeta donde guardamos nuestros elementos a cargar
  2. var almacen:String = "elementos/";
  3. //ancho de nuestra película en flash
  4. var ancho:Number = Stage.width;
  5. //alto de nuestra película
  6. var alto:Number = Stage.height;
  7. //creamos un contenedor donde se cargaran los files externos
  8. //tambien puedes crear manualmente un pequeño movie clip donde va a ir el contenido le quevantemos
  9. this.createEmptyMovieClip("contenedor_mc", 20);
  10. //aquí creamos una transición para nuestras pelis para cuando se carguen tengan
  11. //un efectito de Fade
  12. //importamos los elementos necesarios para este efecto
  13. import mx.transitions.*;
  14. import mx.transitions.easing.*;
  15. //creamos una función y le pasamos como parámetro que película debe ser afectada por el efecto
  16. function fade(peli) {
  17. TransitionManager.start(peli, {type:Fade, direction:Transition.IN, duration:1, easing:None.easeNone});
  18. }
  19. //creamos una nueva película que será un marco alrededor de la que carguemos
  20. this.createEmptyMovieClip("marco_mc", 10);
  21. //creamos una función para que pinte cada película que carguemos
  22. function pintarMarco(target_mc:MovieClip, largoMarco:Number, altoMarco:Number) {
  23. //el espesor del marco
  24. var anchorMarco:Number = 20;
  25. //el color del marco
  26. var colorBorde = 0x00CCFF;
  27. //la transparencia del marco
  28. var transparenciaBorde = 100;
  29. //y aplicamos los cambios
  30. //uso "with" para no tener que escribir el nombre de instancia de nuevo
  31. with (target_mc) {
  32. beginFill(colorBorde, transparenciaBorde);
  33. moveTo(0, 0);
  34. lineTo(10, 0);
  35. lineTo(10, 10);
  36. lineTo(0, 10);
  37. lineTo(0, 0);
  38. endFill();
  39. _width = largoMarco+anchorMarco;
  40. _height = altoMarco+anchorMarco;
  41. _x = contenedor_mc._x-(anchorMarco/2);
  42. _y = contenedor_mc._y-(anchorMarco/2);
  43. }
  44. }
  45. //creamos un nuevo elemento MovieClipLoader que es el encargado de controlar y cargar nuestras pelis
  46. var mcLoader:MovieClipLoader = new MovieClipLoader();
  47. //creamos un escuchador con el cual sabremos que esta pasando en cada proceso
  48. var escuchar:Object = new Object();
  49. //si se inicia y mientras este cargándose...
  50. escuchar.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number) {
  51. //creamos lo necesario para averiguar el porcentaje de carga
  52. var persoTotal = bytesTotal;
  53. var cargados = bytesLoaded;
  54. var porcentaje = Math.round(cargados*100/persoTotal);
  55. //movemos la barra al porcentaje cargado
  56. barraPorcentaje_mc.gotoAndStop(porcentaje);
  57. //escribimos el porcentaje en modo texto en la barrita de carga
  58. barraPorcentaje_mc.cargado_txt.text = porcentaje+"%";
  59. };
  60. //con esta función podemos asignarle propiedades antes de que se muestre
  61. escuchar.onLoadInit = function(target:MovieClip) {
  62. //posicionamos el elemento que s esta cargando al centro, ustedes colóquenlo donde lo necesiten
  63. target._x = (ancho/2)-(target._width/2);
  64. target._y = (alto/2)-(target._height/2);
  65. //mostramos el marco
  66. marco_mc._visible = true;
  67. //pintamos y acomodamos el marco
  68. pintarMarco(marco_mc, target._width, target._height);
  69. //aplicamos el efecto fade
  70. fade(target);
  71. //como pueden ver "target" es la peli afectada
  72. };
  73. //si la carga comenzó
  74. escuchar.onLoadStart = function(target:MovieClip) {
  75. marco_mc._visible = false;
  76. barraPorcentaje_mc._visible = true;
  77. };
  78. //si la carga finalizo
  79. escuchar.onLoadComplete = function(target:MovieClip, httpStatus:Number) {
  80. barraPorcentaje_mc._visible = false;
  81. };
  82. //
  83. mcLoader.addListener(escuchar);
  84. //ACCIONES SIMPLES BOTONES
  85. cargarJpg_btn.onRelease = function() {
  86. //en este caso llamamos a un jpg y el destino es "contenedor_mc"
  87. //como contenedor_mc tiene un escuchador activara automáticamente todo lo que vimos arriba
  88. mcLoader.loadClip(almacen+"1.jpg", contenedor_mc);
  89. //esto es por si nuestro efecto fade se descontrola
  90. contenedor_mc._alpha = 100;
  91. };
  92. cargarPng_btn.onRelease = function() {
  93. //en este caso llamamos a un png y el destino es "contenedor_mc"
  94. //como contenedor_mc tiene un escuchador activara automáticamente todo lo que vimos arriba
  95. mcLoader.loadClip(almacen+"1.png", contenedor_mc);
  96. //esto es por si nuestro efecto fade se descontrola
  97. contenedor_mc._alpha = 100;
  98. };
  99. cargarSwf_btn.onRelease = function() {
  100. //en este caso llamamos a un swf y el destino es "contenedor_mc"
  101. //como contenedor_mc tiene un escuchador activara automáticamente todo lo que vimos arriba
  102. mcLoader.loadClip(almacen+"1.swf", contenedor_mc);
  103. //esto es por si nuestro efecto fade se descontrola
  104. contenedor_mc._alpha = 100;
  105. };

Author: LeoBaraldi

Diseñador gráfico y programador en Web, con experiencia profesional en el rubro desde 1998. Experto en diseño de interfaces Frontend y Backend, sitios, portales y dispositivos móviles. Experto en estándares, CSS y HTML, amplios conocimientos en CEO. Desarrollador de sitios multi plataformas, HTML5, CSS3 y JQuery. Experto programador en Adobe Flex, AIR y ActionScript 3.0. Conocimientos en lenguajes como PHP, Javascript y bases de datos MySQL. Profesor de Diseño y Diseño Web en la Escuela Superior de Diseño Aguas de la Cañada, asesor y colaborador para medios gráficos, editoriales y revistas afines. Actualmente Jefe de Producción en Manifesto solutions.

37 Comments

  1. Buenisimo el ejemplo! Felicitaciones!

    Y este mismo ejemplo se puede usar para cargar, por ejemplo, varias películas, pero que el cargador vaya cargandolas simultáneamente? Y mostrando el texto (ej)

    Cargando Item 1
    Cargando item 2
    etc cada uno con su linea que muestra el progreso...

    se entiende?
    lo intenté pero no me salió..

    saludos desde chile.

    Diego.

  2. exelente ejemplo... !!lo felicito¡¡

  3. hola, he estado mirando muchas galerias, de todo tipo, las sè personalizar, (ejemplo: una q personalize para hacer esta pagina http://www.fotoserrano.com), pero ahora necesito q me aparezcan una imagenes, q pasen una a una en transicion, pero.... q me las carge centradas (ya q son de diferente tamaño), tu ejemplo las carga centradas, super bien, pero como hago para no tener q colocar ni ningun boton ni ninguna miniatura. q apenas carge el swf empiece la presentacion. gracias!

  4. otra felicitación más... genial!

  5. Felicitaciones tambien muy buen código, una preguntita como le hago para cerrar la película cargada?..

    Saludos

  6. Hola Leo, la verdad es que es muy bueno tu trabajo y admirable como compartis tus conocimientos. Respecto a este tutorial: necesito hacer que las imágenes se carguen solas, sin llamarlas de un botón, con un intervalo de tiempo entre ellas, loop y si es posible con un efecto de blur de transición.

    Auxilio!
    Muchas Gracias
    Saludos

  7. Muy bueno tu código, mi amigo

  8. hola leo, me ha sido muy útil tu código pero tengo un problemilla y llevo días investigando pero no encuentro la solucion. Te cuento, he usado tu código para cargar distintos swf, lo que pasa es que cuando paso de uno a otro siempre se mantiene el anterior por debajo, es decir sus botones. te mando un trozo de código relativo a uno de los botones de menú

    Actionscript:
    1. contexto1_bt.onRelease = function() {
    2. //en este caso llamamos a un swf y el destino es "contenedor_mc"
    3. //como contenedor_mc tiene un escuchador activara automáticamente todo lo que vimos arriba
    4. mcLoader1.unloadClip(this);
    5. mcLoader1.loadClip(almacen+"02contexto.swf", contenedor1_mc);
    6. }

    si supieras qué está pasando me ayudarías mucho. un saludo y gracias

  9. carga todos tus swf en un mismo contenedor, por lo visto utilizas 2 diferentes "contenedor_mc" "contenedor1_mc" si los cargas en el mismo contenedor la nueva carga eliminara la anterior!

  10. Muy bueno tu codigo, pero yo tambien tengo un problema, ¿hay alguna forma de poner un boton para cerrar el contenedor? Gracias

  11. Actionscript:
    1. boton_btn.onRelease = function() {
    2.     marco_mc.removeMovieClip();
    3. };

  12. Tengo un problema que creo que este codigo puede solucionar pero no consigo aplicarlo.

    Tengo una serie de imágenes que se cargan de manera aleatoria con random dentro de un clip vacio con un alpha de 0 a 100 , las precargas normales precargan otros elementos pero el .jpg aleatorio, tarda en salir una vez ya realizada la precarga.

    Intente adaptar el codigo pero no consegui el objetivo, siento el tostón pero si me pudieran dar una pista por donde tengo que ir, lo agradecería.

    Saludos *

  13. Johnny te envie la respuesta por email, gracias

  14. Buen dia
    Estoy desarrollando un sitio donde mando llamar o cargo (como lo quieras llamar) un .swf, pero al aparecer no realiza ninguna accion, es una galeria que sola funciana bien, espero puedas apoyarme en la mejor alternativa para este caso.

  15. en la primera línea y primer frame de tu galería coloca lo siguiente:

    Actionscript:
    1. this._lockroot = true;

  16. muchas gracias por esta linea, funciono bien

  17. Hola Leo: serías tan amable de explicar a este docente inexperto en flash como soy yo, este dilema:
    1º quiero cargar un swf externo a mi peli flash(el swf es un fragmento de video)
    2º Este primer paso lo he resuelto pero el swf se reproduce constantemente en bucle, y obviamente me gustaría controlarlo para q los alumnos hagan lo propio con sus respectivos botones.
    3º La idea es hacer un exe de flash
    4º Resumiendo : me gustaría que cualquier alumno pulsando un botón reprodujese el swf, y a su vez tb pudiese deternerlo a su voluntad.
    Esperando no haber abusado de tu paciencia, un docente de Bilbao

  18. Rik Me podrias decir si el video que cargas es en formato FLV?

  19. Leo, la verdad es que pruebo con swf y flv.
    Gracias por tu amabilidad

  20. Rik, la respuesta y ejemplo te lo envie a tu email.

  21. Gracias Leo; eres muy amable.

  22. Leo, estoy en ello, ok? Cualquier duda te lo digo.
    Jamás pensé q por la red hubiera gente como vos, preparada en el tema y ATENTA. Los vascos sabemos agradecer.

  23. Hola muy bueno tu tutorial, pero creo un moviclip manual para que alli se descarguen los swf, o jpg, pero no lo hace, devo cambiar la instancia contenedor o que...Gracias por la respuesta ojala pudiera enviarme un ejemplo fla.Un abrazo

  24. Se me olvido preguntar si se puede linkear la barra (loadbar) para que se llame solo cuando vaya a carga algo.Gracias nuevamente

  25. Uyyyy muchisimas gracias por al codigo :this._lockroot = true; en realidad me salvo de una, tenia el mismo problema de Roberto y llescas, fue como caido del cielo, pase toda la noche depepitandome hasta qque me acorde donde lei eso y pues AQUI GENIAL

  26. Hola Leo:

    Antes que nada te quiero agradecer por compartir tu conocimiento que veo que es mucho y de buena calidad con todos los internautas del mundo. Tu ejemplo de precarga lo modifiqué para acomodarlo a mi diseño y te comento que en las sucesivas pruebas he notado que la película cargada comienza al 80%. Se reproduce antes de que la barra de preloader llegue hasta 100%. Con todo respeto te pregunto a que se debe ese comportamiento y cuál sería su solución. Desde ya Muchísimas gracias. Saludos, Pablo.

  27. Hola Pablo, gracias por tus comentarios y me gusta mucho cuando los usuarios cuando preguntan o me indican si me equivoque en algo, porque de esa manera incentivan a que haga mas cosas. Pensando en el problema que me comentas, es extremadamente extraño que se de con el uso del movieClipLoader, no sera que estas usando el cargador que esta en este link http://www.leobaraldi.com.ar/2008/01/precarga-de-una-pelicula-dentro-de-otra-pelicula/ en vez de este? confírmame si es asi o no porque ya me entro la duda el problema que tenes :) nuevamente muchas gracias por aportar a la web!!

  28. Hola Leo: Utilicé este mismo preloader de esta página y debido a que realizo pruebas con el simulador de descargas de flash CS3 comprobé que en velocidades bajas se nota ese desfasaje que te comenté. Pero Cuando realizé la prueba en el servidor no ví ese comportamiento ya que al cargar rápido da la sensación de que llegò a 100% y comenzo la reproducción. Pero en una ocación probando en una laptop y de conexión lenta pude comprobar que al 78-81% veia por detrás de la barra de precarga la pelicula flash que había comenzado. He buscado en la web el motivo de ese comportamiento y en una respuesta han mencionado que Flash hace eso por defecto. Es decir que larga la pelicula ya cargada sin esperar la confirmación por medio de actionscript. Todo esto salió porque me interesa meter mano y entender el código. No soy programador pero me las rebusco como puedo. Mi profesión es el diseño. Volviendo al tema agrego que de ninguna manera considero este comportamiento de flash un error tuyo de programación. Mi intención es saber ante un comportamiento no lógico (considero no logico que la pelicula se reproduzca antes que le avise el actioscript que lo haga) la manera de solucionarlo. Para poder apreciar mejor ese comportamiento en la simulación de descarga del Flash Cs3 yo lo probé con un archivo de 2mb a 14.400 de velocidad de transmición.

    Leo Gracias por tu interés en responderme. Me gustaría contar contigo para consultarte futuros problemas de programación.

    Saludos.

  29. se me ocurre que quizás colocando un stop() en la peli que se carga y con el evento init llamar una función que de play se solucionaría, pero es verdad, hice unas pruebas y pasa eso que mencionas, ya veré que solución se le puede dar, si sabes de algo bienvenido será tu aporte, desde ya te agregue a mis contactos para que podamos charlar mas de estos casos e intercambiar opiniones o problemas, feliz navidad!!!

  30. Hola, muy útil el código. Tengo una consulta. En la página principal tengo un fondo de imágenes en transición. Cómo hago para que al pasar a otra sección este fondo se borre, ya que me queda abajo.
    Utilice en pag. ppal un cargador y deje fijo solo el menú

    Gracias

  31. Hola LeoBaraldi, he estado leyendo varios comentarios de la gente y tus respuestas y la verdad que me gustaria si es posible que me indicara porqué cuando quiero cargar sample10.swf (archivo creado con el programa Aneesoft 3D Flash Gallery) en mi otro flash (pueba.SWF) no me lo carga ?? y en cambio si me carga otros arhivos *.SWF no hechos por la aplicacion Aneesoft ?? Existe algun problema ?? la funcion que uso para cargar el sample10.SWF externo es on (rollOver) {loadMovie("sample10.swf", "Punto1Studio");}
    on (rollOut) {unloadMovie("Punto1Studio");} (que estoy haciendo con el Adobe flash CS4 profesional. Ya me comentara alguna cosa... y Muchas gracias por su atencion muy interesantes sus explicaciones !!

  32. Hola, estoy modificando la web y este ejemplo me viene muy bien, pero tengo un problema es posible que antes de cargar vaya a un frame y después cargue?.
    La intención es dar al botón ir a un frame y después cargar el .swf externo.

  33. Hola LeoBaraldi. Le comento una inquietud. Estoy trabajando con MovieClipLoader, y cargo un swf el cual tiene una estrada de texto, la cual funciona si reproduzco el swf solo pero no funciona cuando es cargado dentro de otro swf, simplemente no puedo seleccionar la entrada de texto.

    No puedo encontrar posibles causas del problema. Agradecería me oriente por donde buscar. Muchas Gracias!!

  34. es posible cargr externamente una imagen en formato .psd es que tengo una web en donde si o si la imagen debe ser transparente debido a que debe verse la animacion del fondo.
    y como es un logo y no quiero perdida de calidad hace muy pesado el .swf

    muchas gracias desde ya!

  35. Hola, cómo hago para cargar una película pero que en vez de cargarla al apretar el botón la cargue al llegar a cierto fotograma. Podrías ayudarme? Gracias!!

  36. Cómo hacemos para que la película que cargamos de manera externa (loadmovie), respete el centrado de nuestra película raíz.
    Creo que es utilizando la variable target. Muchas gracias.

  37. como sería en AS3???? pero sin botones y que las imagenes roten

Deja un comentario

Required fields are marked *.

*