Comunidad de diseño web y desarrollo en internet online

Stop al clikear vinculo cuando carga un loadmovie

Citar            
MensajeEscrito el 11 Ene 2007 12:51 pm
Buenas, voy a replantear mi duda en otro post porque estaba todo muy confuso en el anterior.
El problema es el siguiente:

Mientras un boton carga un loadmovie en un anclaje de la pelicula principal, aparece en pantalla el preload. Si uno espera a que termine la carga y clikea en otro vinculo, funciona perfecto.
Pero si se clikea en otro vinculo que tambien carga un load en el mismo anclaje ANTES de que la barra de preload llegue a 100, !SUCEDE EL ERROR!!! la pelicula no para de loopear.
Es como si no tuviera STOP... y se reproducen sin parar los fotogramas de la pelicula a cargar, y de ahi en mas, todos los vinculos tienen ese problema.

La precarga que utilizo es la que explican aqui en Cristalab en tutoriales.
La carga la realizo con un simple loadmovie.

NO USO COMPONENTES NI NADA EXTRAÑO:

Pueden chequear el error en:

www.myfsa.com.ar

Necesito hacer un STOP en los demas botones o en las demas cargas cuando se clikea otro vinculo antes de terminar una carga de loadmovie.!

Muchas Gracias a todos por ayudar!

Saludos

palitosci

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 01:50 pm
postea algo del codigo que usas
por lo que dices puedes ser que no estes deteniendo algun loop (onEnterFrame)
o pueden ser otras cosas

Por webgeri

58 de clabLevel



Genero:Masculino  

montevideo

firefox
Citar            
MensajeEscrito el 11 Ene 2007 02:06 pm
Estoy haciendo pruebas para ver que puede ser... es probable que sea el codigo de la precarga...
acá lo pongo para que me digan si hay algun error o si se puede poner algun codigo para detener la pelicula si se clikea en otro loadmovie antes de que esta termine.

Código :

function cargando() {
   var total, cargados, porcentaje;
   total = getBytesTotal();
   cargados = getBytesLoaded();
   porcentaje = Math.floor((cargados*100)/total);
   porcentaje_txt.text = porcentaje+" %";
   barra_mc.gotoAndStop(porcentaje);
   if (cargados == total) {
   clearInterval(hiloPrecarga);
   play();
   }
}

var hiloPrecarga = setInterval(cargando, 1);
stop();


Agradezco su ayuda!
palitosci

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 02:31 pm
Puede haber algun error en esto?

Código :

total = getBytesTotal();
   cargados = getBytesLoaded();


Generalmente esto lo utilizo con _root. delante y solo cuando carton la movie principal dentro de un HTML. Ahora empece a utilizar el preload en los movie que cargo con loadmovies y le saque el _root. para que tome el peso del "swf" a cargar y no de la pelicula principal...

Estoy haciendo pruebas y me parece que puede venir por ahi... no se si sirve de orientacion para que me den una mano...

les agradezco mucho si me ayudan....

saludos

palitosci :)

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 02:41 pm
por lo que veo te falta borrar el intervalo que ya esta cargando una película
antes de empezar a cargar otra

Por webgeri

58 de clabLevel



Genero:Masculino  

montevideo

firefox
Citar            
MensajeEscrito el 11 Ene 2007 03:37 pm
no entiendo a que te referis...

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 04:04 pm
Marche explicacion de setInterval....

Miremos el codigo que posteaste:

Código :

function cargando() {
   var total, cargados, porcentaje;
   total = getBytesTotal();
   cargados = getBytesLoaded();
   porcentaje = Math.floor((cargados*100)/total);
   porcentaje_txt.text = porcentaje+" %";
   barra_mc.gotoAndStop(porcentaje);
   if (cargados == total) {
   clearInterval(hiloPrecarga);
   play();
   }
}

var hiloPrecarga = setInterval(cargando, 1);
stop();


Cuando la cabeza lectora se para el fotograma donde esta el codigo, comienza a ejecutarlo, y comienza con la siguiente linea:

Código :

var hiloPrecarga = setInterval(cargando, 1);

La parte de setInterval(cargando, 1) quiere decir que se ejecutara la funcion cargando cada 1 milisegundo, setInterval hace eso, ahora, hiloPrecarga es el identificador de ese setInterval en particular.
Ahora analicemos la funcion cargando
Si te fijas, dentro del if esta lo siguiente clearInterval(hiloPrecarga) con esto estamos frenando un setInterval, ¿cual? el que le pasamos como parametro, o sea hiloPrecarga.

La parte a la que referis vos

Código :

   var total, cargados, porcentaje;
   total = getBytesTotal();
   cargados = getBytesLoaded();
   porcentaje = Math.floor((cargados*100)/total);
   porcentaje_txt.text = porcentaje+" %";
   barra_mc.gotoAndStop(porcentaje);

se usa para controlar la animacion de la precarga, nada mas.
Total va a tener cuanto pesa el swf a cargar, en bites
Cargados va a tener cuanto se cargo del swf, en bites
Porcentaje tiene eso, el porcentaje de cuanto se cargo de ese swf
Ahora, barra_mc tiene 100 frames, y el porcentaje siempre se mide de 0 a 100. Le vamos a pasar el porcentaje para que se pare en alguno de los 100 frames.
Y listo la explicacion.

Una pregunta, este codigo de precarga, ¿donde lo tenes? ¿En cada swf o en el swf principal?

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 11 Ene 2007 04:20 pm
Lo tengo cargado en cada SWF externo, en la primer escena. Y en la 2da esta la informacion.

Dientuki, puede ser que esto este mal...

total = getBytesTotal();
cargados = getBytesLoaded();

Porque si le pones el _root. te toma el peso de la pelicula principal y por supuesto no funciona el load. Por eso se me ocurrio sacarlo (al _root.), ahora funciona el load pero da ese error de no poder frenar los movieclips si se presiona un boton antes de terminar una carga...

te agradezco si me das una mano...

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 05:19 pm
Insisto con el componente loader, lo cargas una sola ves en el swf y controlas todo desde ahi, es mas practico.

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 11 Ene 2007 05:39 pm
Dientuki, no voy a cambiar toda la web por este problema.. tiene que haber una forma de modificar la programacion de este load para que funcione en cargas de mc externos.

Me podrias decir que quizo decir con esto?

webgeri
MensajePublicado: Jue Ene 11, 2007 2:41 pm
por lo que veo te falta borrar el intervalo que ya esta cargando una película
antes de empezar a cargar otra


Antes de darme una clase, decime como corrigirias el codigo en base a lo que dice webgeri...

Te agradezco...

palitosci

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 06:17 pm
Hace lo siguiente entonces, cambia el nombre de hiloPrecarga en todos los swf, la idea es que sean todos los nombres distintos. Ejemplo:
"miprimerparte.swf" > hiloprecarga1
"misegundaparte.swf" > hiloprecarga2

tambien cambia el parametro que se pasa por clearinterval.


El error que tenes parece ilogico, ya que cada swf tiene su propio loader. Estoy asumiendo que debe haber algun conflico con las variables del setinterval.
Si lo que te dije no funciona, pone este codigo:

Código :

if (hiloPrecarga != undefined){
           clearInterval(hiloPrecarga);
}
var hiloPrecarga = setInterval(cargando, 1);
stop();

en cada swf

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 11 Ene 2007 06:20 pm

palitosci escribió:

Antes de darme una clase
Te doy una clase para que aprendas y resuelvas tus problemas mas rapido, aparte de que entenderias la solucion. Es mi forma de ayudar, te digo donde esta el error y te digo "usa esa herramienta de tal forma", asi aprendes mucho mas que si yo voy y uso esa herramienta por vos.

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 11 Ene 2007 06:53 pm
no es eso... se como funciona pero no entiendo a que se refiere este usuario...
no hace falta que me expliques se significa cada cosa...

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2007 10:18 pm
A ver a ver aver... les subo unos .fla de prueba para que vean lo tonto que es lo que estoy preguntando! se tiene que poder ajustar el codigo para que funcione.

UNA BOTONERA, 4 botones comunes, un anclaje (mc vacio con nombre de instancia).
4 swf externos con precarga (la del tutorial de Cristalab).

Cada boton hace loadmovie de cada SWF respectivamente y los carga en el anclaje.

Hasta ahi bien. Ahora, si uno apreta mientras esta la barra cargando otro boton, se arruina todo y titila sin parar como si no hubiese STOP.

Es simple de probar, es simple de ver el error, pero es dificil de solucionar sin modificar demasiado el codigo.

Subo los .fla para que puedan chequearlo... asegurense de aumentarle el peso a los .fla que se cargan asi comprueban la falla del preload.

www.gemadesign.com.ar/website.rar

Agradezco mucho una solucion.

Saludos
palitosci :)

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2007 09:34 am
palitosci, tengo la solucion a tu problema. Puedes bajarla aca y la explicacion, aqui.

No encontre el problema, a pesar de que seguiste mis consejos :( asi que opte con el componente loader (muy a tu pesar pero otra no quedaba)
Reemplace el codigo de los botones por el siguiente

Código :

cargar("SWF A CARGAR");

y en un frame puse

Código :

function cargar(swf:String) {

   attachMovie("cargando", "barrag_mc", 2);
   //Deberas cambiar la posicion del movie clip
   barrag_mc._x = 262;
   barrag_mc._y = 117.2;   
   
   mi_cargador.contentPath = swf;
   mi_cargador.load();
}

mientrasCarga = new Object();
mientrasCarga.progress = function(evento) {
   barrag_mc.barra_mc.gotoAndStop(Math.floor(mi_cargador.percentLoaded));
   barrag_mc.porcentaje_txt.text = Math.floor(mi_cargador.percentLoaded);
};

//Listener para comprobar si ha cargado del todo
alCargar = new Object();
alCargar.complete = function(evento) {
   removeMovieClip(barrag_mc);
};

//Eventos
mi_cargador.addEventListener("progress", mientrasCarga);
mi_cargador.addEventListener("complete", alCargar);

stop();

La funcion cargar lo que hace es poner la barra de precarga, le pasa al loader el swf a cargar y lo carga. Mientras se carga se ejecuta el evento progress que ejecuta la funcion mientrasCarga, esa funcion mueve la cabeza lectora de la barra y cambia el numero del porcentaje.
Cuando se completa se ejecuta alCargar, que lo que hace es borrar la barra de precarga.
En los demas swf se elimino la escena de precarga.

De nada

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 12 Ene 2007 12:51 pm
Gracias Dientuki pero tampoco funciona.

Ponele peso a los Swf que se cargan y proba con el Simulador de Descargas de Flash.
Clikea en 1 boton y cuando este haciendo la precarga, cuando te muestre la barrita y se este cargando clikea en otro boton, deja que cargue el nuevo boton y CHAN!!!
Empieza el loopeo.... intermitente....

Tampoco se soluciona el problema.


Lo que me resulta raro es que algo tan sencillo de un error asi.

Vuelvo a plantear el problema:

Tomemos 2 tutoriales de Cristalab como base:

Precarga en Flash de F

http://www.cristalab.com/tutoriales/3/precarga-en-flash
Navegación con peliculas externas en Flash
http://www.cristalab.com/tutoriales/106/navegacion-con-peliculas-externas-en-flash

Bueno, ahora si utilizamos las Precargas del primer tuto en las peliculas externas del 2do tuto
y clikeamos en un boton y mientras esta cargando la barra (probarlo con el simulador de descargas) clikeamos en "otro" boton, sale el ERROR en cuestion.

NUevamente gracias Dientuki pero esto todavia no se ha solucionado, probe tu .fla y lei las instrucciones pero el error sigue.

Un saludo
y espero mas ayuda!

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2007 02:02 pm
Hola:
Antes que nada aclaro que no soy un ignorante en AS pero no podría darte las explicaiones de Dientuky, que me parecen muy buenas, por lo menos a mi me vienen bien. :wink:
Ahora según veo en el problema que describes al principio del post, tal vez debes probar, si es que no lo has hecho ya, de hacer un unloadMovie como instrucción inmediata al on (release) y antes del loadMovie, de esa manera se descargaría cualquier película en proceso de carga o se descargaría la existente. Tal vez así se pueda superar el error del loop contínuo.
Saludos.

Por Nito

790 de clabLevel



 

Transformado en 100111101000011

firefox
Citar            
MensajeEscrito el 12 Ene 2007 02:18 pm
si, fue lo primero que probe, pero no funciona...
gracias igualmente

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 12 Ene 2007 02:42 pm
:wtf: fui mi primera reacion, luego probe lo que decis palitosci y tenias razon U_U muy a mi pesar.
Ahora, haz click aqui y veraz como funciona sin errores!!!!!!!!!!!
¿La solucion? Tan simple como el problema, y me paso por no leerme :bate: (Fue un autobate)
Olvida todo lo del componente loader, y reemplaza el codigo de la precarga en cada uno de los swf por el siguiente

Código :

function cargando() {
   var total, cargados, porcentaje;
   total = getBytesTotal();
   cargados = getBytesLoaded();
   porcentaje = Math.floor((cargados*100)/total);
   porcentaje_txt.text = porcentaje+" %";
   barra_mc.gotoAndStop(porcentaje);
   if (cargados == total) {
      clearInterval(_global.hiloPrecarga);
   play();
   }
}

if (_global.hiloPrecarga != undefined){
   clearInterval(_global.hiloPrecarga);
}

_global.hiloPrecarga = setInterval(cargando, 1);
stop();

¿la diferencia? es el _global. con esto creamos una variable global y siempre vamos a tener un intervalo por mas que el usuario de turno haga click en cualquier lado. Basicamente cuando se hace click en otro boton y se esta ejecutando un precarga, lo que hace es anularla (ya que detiene el intervalo) y comienza la nueva precarga.

Por Dientuki

Claber

2021 de clabLevel

11 tutoriales
1 articulo

Genero:Masculino   Héroes

Front-end Ninja

firefox
Citar            
MensajeEscrito el 12 Ene 2007 03:25 pm
Genial!
Dientuki la verdad que te tengo que super agradecer porque en estos 2 dias estuviste ayudandome a encontrar una solucion a un problema que me estaba trabando mucho.

funciona perfecto. Todavia no lo probe online pero en el simulador de flash va!

Nuevamente gracias, me diste una gran mano.

saludos

palitosci

Por palitosci

60 de clabLevel



Genero:Masculino  

Argentina

firefox
Citar            
MensajeEscrito el 26 Sep 2007 06:25 pm
BUenas me agrego con este coemntario para agradecer a que me solucionaron también un gran problema, muchísimas gracias.

Saludos

Por Jak Segui

0 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Nov 2007 08:19 pm
Hola
a mi tambien me soluciono este prblema de loop constante. Y eso q trabaje con loadMovieNum,
Gracias!

Por merkui

1 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 19 Jun 2008 08:22 pm
Bueno, la verdad que encontre este post porque tengo el mismo problema, con el agravante que soy SUPER NUEVA EN FLASH!!!
Ahora bien, sucede que yo quiero cargar distitos SWF externos, son 3 distintos portfolios que tienen un preload, el grave problema es que yo no puedo acceder a los mismos!! porque no tengo los FLA porque fueron generados desde el Flash Slideshow Maker, entonces no puedo agregar dicho código!!! Como puedo hacer para que no me suceda lo mismo que a Palitosci quien abrio este POST?

Código :

on (release) {
_root.contenedor.loadMovie("portfolioidentidad.swf");
} 


como se les ocurre que pueda hacer? actualmente lo que hice fue hacer distintos HTML y linkear a los HTML, pero no es lo correcto...
desde ya gracias por su ayuda!!!

Por italkairo

0 de clabLevel



Genero:Femenino  

Uruguay

msie7
Citar            
MensajeEscrito el 19 May 2009 05:09 pm
Mil gracias...habia terminado un proyecto y estaba en las mismas que "palitosci", me negaba a creer que no habia una solución para este problema..al final aparecio "Dientuki" y con paciencia magistral le puso corte al embrollo flashero..
gracias a ambos.(por iniciar en tema y por solucionarlo)

http://foros.cristalab.com/problema-con-boton-que-llama-swf-externo-t73193/

Ghoyho

Por Ghoyho

2 de clabLevel



 

msie7
Citar            
MensajeEscrito el 11 Mar 2011 12:23 am
hola Dientuki,

por un problema con los loadmovies que me producen un loop en mi sitio, llegue a la solucion que planteaste en este foro.

function cargando() {
var total, cargados, porcentaje;
total = getBytesTotal();
cargados = getBytesLoaded();
porcentaje = Math.floor((cargados*100)/total);
porcentaje_txt.text = porcentaje+" %";
barra_mc.gotoAndStop(porcentaje);
if (cargados == total) {
clearInterval(_global.hiloPrecarga);
play();
}
}
if (_global.hiloPrecarga != undefined){
clearInterval(_global.hiloPrecarga);
}
_global.hiloPrecarga = setInterval(cargando, 1);
stop();

Me lo solucionó en parte, el loop ya no se pasea por todo el root pero ahora lo q me produce al iniciar 2 cargas de loadmovies es q se va al siguiente frame de la animacion pricipal.

te dejo el link de la web para q lo compruebes...

www.diegoadamo.com.ar

gracias por tu ayuda!!!

Por diegolee

13 de clabLevel



 

firefox

 

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