Foros del Web » Creando para Internet » Flash y Actionscript »

preloader en contenedor AS2

Estas en el tema de preloader en contenedor AS2 en el foro de Flash y Actionscript en Foros del Web. Hola. Tengo un problema con los preloader, estoy probando varios y todos me dan problemas parecidos, cuando se carga el .swf externo en el contenedor, ...
  #1 (permalink)  
Antiguo 21/05/2009, 15:25
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
preloader en contenedor AS2

Hola.
Tengo un problema con los preloader, estoy probando varios y todos me dan problemas parecidos, cuando se carga el .swf externo en el contenedor, aparece la barra de carga llena hasta el tope un segundo y de repente se pone a parpadear y nunca llego al fotograma 2. hace como bucle, cómo puedo solucionarlo?

Estoy usando el preloader del tutorial de cristalab hecho por freddie (el de la barrita roja) de un enlace de este foro.

Gracias.

Última edición por Pantanico; 21/05/2009 a las 16:08
  #2 (permalink)  
Antiguo 21/05/2009, 15:38
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor

Por si los expertos no recuerdan cúal es pongo el código aquí.
(pienso que el bucle es debido a la acción de -set interval y clear interval-, todo lo demás, las instancias, los nombres están hechos igualito al ejemplo)

Capa actions, frame1 del .swf que se carga en el contenedor:
Código:
/* Declaro la función de precarga "cargando", esta función se ejecutara
   todo el tiempo hasta que haya cargado totalmente la pelicula */
function cargando() {
   // Declaración de variables
   var total, cargados, porcentaje;
   // A la variable "total" se le asigna el tamaño de la pelicula en bytes
   total = _root.getBytesTotal();
   // A la variable "cargados" se le asignan el total de bytes hasta el
   //momento descargados de la web
   cargados = _root.getBytesLoaded();
   //Por medio de una regla de tres obtiene el porcentaje cargado y redondea el valor con la función
   //"Math.floor"
   porcentaje = Math.floor((cargados*100)/total);
   //Asigna al campo de texto porcentaje_txt el porcentaje cargado
   porcentaje_txt.text = porcentaje + " %";
   //Mueve la barra de carga al frame correspondiente al porcentaje
   barra_mc.gotoAndStop(porcentaje);
   //Si la cantidad de bytes cargados es igual a la cantidad total de bytes
   if (cargados == total) {
      //Hacer que se deje de ejeuctar esta función
      clearInterval(hiloPrecarga);
      //Iniciar la pelicula
      play();
   }
}

// setInterval nos servira para que la función "cargando" se ejecute cada 1 milisegundo
// Asi, nuestra función revisara constantemente la cantidad de bytes descargados 
// y solo iniciara la pelicula hasta que la descarga termine
// la variable "hiloPrecarga" nos servira para saber que esta corriendo nuestra función
// y frenar su ejecución cada milisegundo por medio de "clearInterval"
var hiloPrecarga = setInterval(cargando, 1);

//Evita que inicie la pelicula
stop(); 
  #3 (permalink)  
Antiguo 21/05/2009, 16:37
Avatar de Bandit
Moderador
 
Fecha de Ingreso: julio-2003
Ubicación: Lima - Perú
Mensajes: 16.726
Antigüedad: 21 años, 4 meses
Puntos: 406
Respuesta: preloader en contenedor AS2

Hola Pantanico:
Utiliza éste código:
Código:
function cargando() {
	var total;
	var cargados;
	var porcentaje = 0;
	total = _root.getBytesTotal();
	cargados = _root.getBytesLoaded();
	porcentaje = Math.floor((cargados*100)/total);
	porcentaje_txt.text = "cargando: "+porcentaje+" %";
	barra_mc._xscale=porcentaje;
	if (cargados == total) {
		clearInterval(hiloPrecarga);
		gotoAndPlay(2);
	}
}
var hiloPrecarga = setInterval(cargando, 10);
stop();
Espero haberte sido de ayuda.
__________________
Bandit.
Si no sabes estudia y si sabes enseña.
http://www.banditwebdesign.com/
  #4 (permalink)  
Antiguo 21/05/2009, 16:47
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

mm tú crees?

hice todo tipo de pruebas, incluyendo cambiar esta línea:
barra_mc.gotoAndStop(porcentaje);

por esta: barra_mc.gotoAndPlay(porcentaje); jugando con los stops por aquí y por allá, y muchas más cosas, pero no lo he conseguido.

Ahora después de cenar probaré con ._xscale
  #5 (permalink)  
Antiguo 21/05/2009, 16:57
Avatar de Bandit
Moderador
 
Fecha de Ingreso: julio-2003
Ubicación: Lima - Perú
Mensajes: 16.726
Antigüedad: 21 años, 4 meses
Puntos: 406
Respuesta: preloader en contenedor AS2

Simplemente copia y pega el código que te di en el primer frame de tu película.

Espero haberte sido de ayuda.
__________________
Bandit.
Si no sabes estudia y si sabes enseña.
http://www.banditwebdesign.com/
  #6 (permalink)  
Antiguo 22/05/2009, 09:44
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

Hola Bandit.

Ahora lo que sucede es que cuando le damos al botón que nos carga la página, sale la barra a tope un segundito, se llega a ver como en un parpadeo de un frame sólo, los botones de la página anterior, desaparecen y la barra se queda fija. nunca se carga la página.

mira, no entiendo por qué pasa esto.
En la pélicula que tiene que ser cargada he desplazado los fotogramas del 1 al 2, quiero decir, en el frame 1 de todos los elementos de esta pélicula hay fotogramas vacíos, sin nada. Los únicos fotogramas con contenido en frame1 son los del preloader:

capa actions: código
capa preloader: barra_mc
otra capa: campo de texto

En el frame 1 aparte de todo esto, no hay stop(); en el frame 2 sí, (para que se pueda reproducir todos los contenidos)
Todas las instancias están requetecomprobadas y están correctas.

No habrá algún problema con los preloader y el contenedor?
Habrá que poner el preloader en el primer frame del MC_vacio donde cargamos las .swf externas?
ya no se que hacer..
  #7 (permalink)  
Antiguo 22/05/2009, 09:53
Avatar de Bandit
Moderador
 
Fecha de Ingreso: julio-2003
Ubicación: Lima - Perú
Mensajes: 16.726
Antigüedad: 21 años, 4 meses
Puntos: 406
Respuesta: preloader en contenedor AS2

Hola Pantanico:
El preloader ponlo en el primer frame de la película que vas a cargar.
El código que te di funciona sin problemas.

Espero haberte sido de ayuda.
__________________
Bandit.
Si no sabes estudia y si sabes enseña.
http://www.banditwebdesign.com/
  #8 (permalink)  
Antiguo 22/05/2009, 10:23
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

Ok, Bandit.
Gracias por la ayuda.
  #9 (permalink)  
Antiguo 22/05/2009, 11:16
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

Hola.

Creo que lo he resuelto.

Ya he sugerido antes que el problema estaba en el dichoso contenedor. ya he leido a algún usuario diciendo que "los contenedores para la basura" ya que este método da muchos quebraderos de cabeza y se puede hacer de manera más limpia.

bueno, a lo que iba:

el código del dichoso contenedor dice:

"si los bytes cargados son distintos de cero y los bytes cargados son iguales a los bytes totales de la película, entonces ir al fotograma 1 del MC_contenedor."

Estas acciones interactuan sobre los mismos elementos que el preloader y por lo tanto no puede funcionar y hace bucle, no se reproduce etc..
Lástima no haberlo mirado antes..

Código:
onClipEvent (load) {

clip_mc = this.createEmptyMovieClip("MCvacio1", 1);
clip_mc.loadMovie("journey.swf");
clip_mc._x = 39;
clip_mc._y = -30

this.onEnterFrame = function() {
	if (clip_mc.getBytesLoaded() != 0 && clip_mc.getBytesLoaded() == clip_mc.getBytesTotal()) {
		trace("cargandose");
		clip_mc.gotoAndPlay(1);//aquí va el número del frame dode se quiere ir
me falta subirlo al servidor para hacer la prueba, pero no puedo acceder en estos momentos..
desde mi equipo si funciona, a ver cuando haga la prueba defintiva.
  #10 (permalink)  
Antiguo 22/05/2009, 11:44
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

ok, funciona!! lo único es que no se reproduce la animación de la barra.
Cuando se pulsa el botón, sale la barra a tope y el 100% y está en pantalla hasta que se carga la siguiente página.

Habrá que hacer algún ajuste más.

se aceptan sugerencias, que queda ya poco para que funcione del todo.

salu-2!!
  #11 (permalink)  
Antiguo 22/05/2009, 13:31
Avatar de highlord  
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 353
Antigüedad: 17 años
Puntos: 16
Respuesta: preloader en contenedor AS2

yo siempre uso este cod, lo escribo siempre además con la descripción de cada funcion para no olvidarme, fijate donde se realiza el movimiento de la barra. que en este caso es un m.c. llamado barra_mc de 100 fotogramas en la animación como comúnmente se hace en un preload.

function cargando() {
// Declaración de variables
var total, cargados, porcentaje;
// A la variable "total" se le asigna el tamaño de la pelicula en bytes
total = _root.getBytesTotal();
// A la variable "cargados" se le asignan el total de bytes hasta el
//momento descargados de la web
cargados = _root.getBytesLoaded();
//Por medio de una regla de tres obtiene el porcentaje cargado y redondea el valor con la función
//"Math.floor"
porcentaje = Math.floor((cargados*100)/total);
//Asigna al campo de texto porcentaje_txt el porcentaje cargado
porcentaje_txt.text = porcentaje+" %";
//Mueve la barra de carga al frame correspondiente al porcentaje
barra_mc.gotoAndStop(porcentaje);
//Si la cantidad de bytes cargados es igual a la cantidad total de bytes
if (cargados == total) {
//Hacer que se deje de ejeuctar esta función
clearInterval(hiloPrecarga);
//Iniciar la pelicula
play();
}
}
var hiloPrecarga = setInterval(cargando, 1);
stop();

Te lo recomiendo porque es muy simple y funciona, además podés mostrar el porcentaje cargado en un campo de texto que en este caso sería crear uno con la variable porcentaje_txt

espero que te sirba.

Saludos
  #12 (permalink)  
Antiguo 22/05/2009, 13:57
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

Hola Highlord.

Es el mismo código que estoy utilizando, lo malo esque hay un MC_contenedor de por medio, donde se está cargando la película .swf externa la cual quiero precargar.

Lo que no entiendo es por qué narices un código muy sencillo y entendible que a todo el mundo le va, a mi me va como le da la gana. Haciendo retoques por aquí y por allá cada vez funciona mejor, por lo tanto la explicación es: que hay algo en la película principal (que hace la llamada a load), que hace que la precarga funcione en bucle (solucionado) o que no se reproduzca la animación de la barra ni se vea el campo de texto .
Sólo hay que pensar, qué es lo que produce esa interacción?.

Sé que hay otras formas de cargar un .swf pero lo hice así y no quiero ponerme a cambiar todo ahora .
Echadme un cable pensando, plis.
  #13 (permalink)  
Antiguo 22/05/2009, 14:22
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

A ver, con el código del tutorial me sale la barra llena y el campo de texto a 100%
con el código de Bandit me sale la barra vacía y el campo de texto vacío.
En ambos casos, mientras dura la precarga, se ven esos elemento en la pantalla y desaparacen justo en el momento que aparece la nueva página.
Por lo tanto el código me precarga la película.

Por qué no se inicia la animación en un caso o ya se ha completado en el otro?

Es como si el código no diera pasadas, será la función math.floor ((cargados*100)/total); que no es la correcta en este caso?
La forma de entrar en la función (setInterval) o la forma de salir (clearInterval) se pueden expresar de otro modo ?
Sería conveniente hacer de otro modo la entrada y salida a la funcion con un bucle FOR, por ejemplo?

Si en esta línea:
var hiloPrecarga = setInterval(cargando,1);

modificamos el 1 y no ponemos nada.. la animación se reproduce entera y a partir de ahí se repite, por lo tanto la barra es correcta, pero en conjunto no funciona todo a la vez.

Qué hariais vosotros en ese código para iniciar la ainmación?
venga, que esta a punto!!
  #14 (permalink)  
Antiguo 22/05/2009, 20:33
Avatar de highlord  
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 353
Antigüedad: 17 años
Puntos: 16
Respuesta: preloader en contenedor AS2

Disculpa, lo que pasa es que hago pasadas rápidas por este foro y por lo general trato de ayudar, mas que nada si luego pretendo que me ayuden, pero es como que no me da para meterme tan de lleno en un problema porque todo el tiempo me mantengo ocupado con los mios, no sé si el problema está en el cod, me parece que está interferiendo con algo mas que está en tu película, porque no pruebas metiendo el preload en el archivo externo, Digo me parece que si funciona asi no habria mucha diferencia. Te lo digo porque yo nunca pongo precargas a los mc. siempre las coloco al principio de cada swf y nunca tube un problema comoe el tuyo. Lo demás de ponerme a pensar creeme que estoy muy lejos!! jajaja no lo tomes a mal es cuestion de tiempo.
Saludos.
  #15 (permalink)  
Antiguo 03/06/2009, 12:35
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

Hola highlord.

He estado unos días desconectado de esto porque han sido fiestas en mi ciudad. Retomaré el asunto y veré cómo hacer que funcione.

Gracias por contestar.
  #16 (permalink)  
Antiguo 05/06/2009, 05:22
 
Fecha de Ingreso: marzo-2009
Ubicación: Elda - Alicante
Mensajes: 55
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: preloader en contenedor AS2

Hola.

Estaba pensando en ponerle este código al preloader, ya que me he dado cuenta que no entra en el bucle con lo de set interval y clear interval así qué he probado con esto:

Código:
var total, cargados, porcentaje, i;


for (i = 0; i <= porcentaje; i++) {
	total = _root.getBytesTotal();
	cargados = _root.getBytesLoaded();
	porcentaje = Math.floor((cargados*100)/total);
	porcentaje_txt.text = porcentaje + " %";
	barra_mc.gotoAndStop(porcentaje);
	  	if (cargados == total) {
	        i= porcentaje;
	        play();
	              }				  
}
stop();
parece lógico no? pero tampoco va bien..
:-p
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:29.