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

Precarga de una película dentro de otra película

| 17 Comments

abraham Davila Dice:

Hola leo...me preguntaba si puedes poner un ejemplo de precarga de una película dentro de otra película te doy un ejemplo porque no se cómo explicar bien lo que busco. en esta página funciona bien el pre cargador, pero cuando carga la pela principal el pre cargador de las películas internas dentro de la primera no aparece! ósea no funciona.... ojala me hayas entendido

gracias

Hola Abraham, ante que todo gracias por visitar mi sitio!, bueno lo mejor sería que uses la clase movieClipLoader que está diseñada para esas cosas, esta clase te permitirá cargar no solo swf sino también cualquier tipo de imagen prácticamente (jpg, png, gif) y dicha clase cuenta con detectores de eventos como el onprogress que podrás saber qué porcentaje de carga del elemento externo se ha realizado, también podes saber cuáles son las dimensiones del elemento a cargarse y cuando finalizo la carga como si la misma se realizo correctamente! Como veras es muy completa y la mejor solución, hay un tuto de la misma en este link

De todos modos también voy a contestar tu consulta y te explicare porque pasa lo que pasa!!!

Normalmente cuando realizamos un cargador tenemos la mala costumbre de usar elementos absolutos como por ejemplo _root y ahí ya todo mal!!!

Por ejemplo todos sabemos que para hacer un cargador uno de los datos principales que debemos saber es cuánto pesa nuestra película y normalmente hacemos los siguiente:

var pesoTotal:Number = _root.getBytesTotal();

Acá hemos creado una variable llamada pesoTotal que almacena un número, y el valor que almacena es el peso total de nuestra película!

Hasta ahí vemos que está todo bien!!!! siempre y cuando este cargador este en la película principal, pero si este misma línea la ponemos en otra película que es llamada de la principal el peso total hace referencia a la película principal y no la que se está cargando gracias al bendito "_root".

Recuerden que _root es siempre la película principal, madre, level0 o como sea pero nunca la película actual que se estar cargando dentro de otra!!!

La solución es muy simple! debemos usar rutas relativas!!! de la siguiente manera!
var pelicula:MovieClip = this;

Primero ante de todo creamos una variable que haga referencia a nosotros mismo, sin importar donde estemos, como pueden ver cree una variable que se llama "pelicula" y espera recibir un dato de tipo movieClip, el nombre de la pelicula es "nosotros mismo" o "yo mismo" sin importar donde este!!!

ahora agregamos la siguiente línea:

var pesoTotal:Number = pelicula.getBytesTotal();

Como pueden ver ahora si !! mi peso total va a ser siempre el peso de donde o lo que este cargando!
Espero que se entienda, de todos modos como siempre les dejo el código, files y demostración para que lo comprueben ustedes mismos!!! Este tipo de cargador lo pueden utilizar en cuantas películas quieran y siempre va a funcionar dada su autonomía lograda por usar rutas relativas y ABSOLUTAS.

Actionscript:
  1. //detenemos la película
  2. stop();
  3. //creamos una variable con la referencia a nosotros mismos
  4. var pelicula:MovieClip = this;
  5. //guardamos el peso total de la película
  6. var pesoTotal:Number = pelicula.getBytesTotal();
  7. //mientras se reproduce evaluamos lo siguiente:
  8. pelicula.onEnterFrame = function() {
  9. //calculo de lo que se a cargado...
  10. porcentaje = Math.floor((pelicula.getBytesLoaded()/pesoTotal)*100);
  11. //escribimos el porcentaje en un campo de texto
  12. porcentaje_txt.text = porcentaje+"%"
  13. //movemos una barrita según lo cargado
  14. barra_mc.gotoAndStop(porcentaje)
  15. //si la carga fue completa
  16. if (porcentaje!=100) {
  17. //eliminamos para liberar memoria
  18. delete this.onEnterFrame;
  19. //y listo si la carga fue completa le indicamos a donde ir
  20. gotoAndStop(2);
  21. }
  22. };

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.

17 Comments

  1. hola, estoy aprendiendo diseño web y buscando cosas llegue a tu sitio.

    sos muy capo por tirar tanta data. estoy ansioso por avanzar en mi curso para poder aprovechar tu info.

    vos das clases??

  2. hola soy diseñadora y se muy poquito el actionscrip, bueno, estoy haciendo una presentacion donde debo cargar una pelicula despues de otra sin botones!!!Por ejemplo mi pelicula 1.swf al terminar debe llamar a la otra 2.swf y asi con las demas. Lo que hecho es hacer toda la pelicula en una, pero ya me va pesando 2 megas...ufff y ya no quiero que crezca mas! Please ayudame
    liz

  3. Hola Liz te recomiendo que hagas primero una pelicula que se encargara de levantar las restantes. Supongamos creamos un swf con el nombre base.swf en el crea un movie clip vacio donde vas a poner las peliculas a cargar supongamos que se llama cont_mc, la primera a cargar la podes cargar asi cont_mc.loadMovie("peli1.swf"), en la peli1.swf al final llamas la siguiente a cargar _root.cont_mc.loadMovie("peli2.swf") y asi con todas tus pelis.
    Esta es la manera mas cortita, si queres algo mejor te recomiendo que uses la clase movieClipLoader. CUalquier cosa avise ;)

  4. Hola Andres!!! gracias por visitarme! por ahora no estoy dando clases :( de flash exclusivamente, hace unos dias comence a dar un curso de Fireworks, Dreanweaver y flash basico para principiantes.

  5. holas Leo,
    soy super nueva en estos temas de action script y me estoy volviendo loca con algo que creo que es muy simple de resolver.
    En un MC cargo un swf externo y lo hace de maravillas, el problema aparece cdo tengo un swf con scroll o con alguna otra accion, al cargarlo en el MC lo deja ver pero no realiza ninguna accion y me da este msj de error:

    Destino no encontrado: Destino="/upaction" Base="_level0.cargador"
    Destino no encontrado: Destino="/scroll" Base="_level0.cargador"

    vos sabrias como ayudarme?
    please ya no se que hacer!!!

  6. hola ... quiero cargar un .swf que contiene un scroll dentro de un mc. lo carga pero no funciona el scroll y me pone:
    Destino no encontrado: Destino="/textclip" Base="_level0.pepe"

    alguien? ayudaaa

  7. Hola Leo. Queria saber si me podes ayudar con esto...
    Estoy trabajando las precargas de un proyecto con MovieClipLoader y los .swf que cargo aparecen sobre el mc del proyecto maximizados y con fondo transparente, es decir no respeta el tamaño original de la pelicula que carga, sino que lo maximiza y aparte le saca el fondo (el mc y los swf externos son del mismo tamaño).
    Tendras alguna sugerencia para probar?
    Gracias!!!

  8. Si me envias los files podria darme cuenta mejor del problema ;)

  9. hola buenas. tengo el siguiente asunto tengo una pelicula en la que se cargan varias imagenes mediante this.loadMovie('imagen.png');
    como hago un cargador para toda la peli? me refiero que cuando llegue al 100% esten todas las imagenes cargadas gracias
    sos un capo das pila de data

  10. Hola amigo, bueno vamos por parte! para cargar imágenes externas con as2 es recomendable usar la clase MovieClipLoader ya que esta es ideal para dicho trabajo. Como tú estás haciendo ahora no hay manera de controlar cuando todas las películas están cargadas y por lo tanto tampoco tienes el control de la mismas!

    Te recomiendo que leas el tutorial de cómo usar MovieClipLoader

  11. Hola Leo, muy bueno el sitio y gracias por todo!. Solo me quedo la siguiente duda:La respuesta que le diste a Liz esta muy clara y funciona 10 puntos, pero que pasa si en el archivo base.swf tengo la linea de tiempo dentro de un MC que se llama Pelicual? Como tendría que llamar desde peli1.swf? Para decirle que no vaya a la linea de tiempo de la raíz, sino que vaya a la linea de tiempo del MC?

  12. Patricio, hay varias maneras de hacerlo, una es indicando la ruta absoluta desde peli1.swf que seria así: _root.Pelicula.loadMovie("peli2.swf") o bien utilizar una ruta relativa que seria así: _parent.Pelicula.loadMovie("pelicula2.swf").
    Recuerda que con la propiedad _parent indicamos que salga un nivel hacia afuera, si tu root tiene una pelicula_mc el orden seria root -> pelicula_mc, por lo tanto son 2 niveles desde película y para subir y volver a cargar algo dentro de pelicula_mc simplemente usamos _parent que seria un nivel mas arriba, puedes usar cuantos parent sean necesarios, te recomiendo que uses _parent y this siempre y evites el uso de root.
    Te recomiendo que leas esto: http://www.leobaraldi.com.ar/index.php?s=orden+de+apilamiento

  13. Hola Leo. Debe haber unas 150000 personas que agradecen un sitio como el tuyo. he visto que tienes algunas de tus explicaciones en AS3. ¿Podrías poner una versión AS3 de esta?

  14. Ok! ya voy a hacer 1 ;)

  15. Leo, sin palabras, sos un capo!!!

    Mi problema es el siguiente: tengo un swf cuyo nombre es home.swf , el mismo contiene una botonera con las respectivas secciones, al presionar alguno de sus botones llamo a dos swf a la vez en distintos niveles: fondo.swf en el nivel 10 y contenido.swf en el nivel 20, quedando home.swf en el nivel 30.

    En síntesis lo que pretendo hacer es que al clickear los botones de cada sección cambie el fondo. El error se produce porque el fondo es una imagen de 1920 x 1080 pixeles y es más pesado que el contenido, se demora mucho en cargar. Cómo puedo hacer para que una vez cargado el fondo me cargue el contenido? o que ambos se carguen a la vez? necesito que queden en dos niveles si o si para que quede el fondo por detras, el contenido en el centro y la botonera por delante.

    Gracias, espero tu ayuda!!!

  16. Utiliza la clase movieClipLoader junto al evento onLoadComplete para realizar lo que requieres, cuando se completa la carga de la imagen inicias la carga del contenido!

  17. Hola Leo !

    Soy nuevo en estas visitas, tu sitio es de mucha utilidad

    Bueno, te queria consultar si podras ayudarme con este ejercicio pero en actionscript 3.0, o sea como hacer funcionar botones de un swf externo ya cargado.
    E intentado con contentloaderinfo, pero hay algo que no estoy haciendo correctamente, me podras orientar ?

Deja un comentario

Required fields are marked *.

*