Problemas con loading
A ver si alguien puede ayudarme.. me estoy volviendo loca...
Tengo un problema que no logro solucionar ni a la de 3... tengo un preload, he probado con diferentes codigos pero no hay forma, el preload esta en el primer frame i en el segundo frame esta toda la web completa, practicamente toda esta con funciones y con los famosos tween de laco, el tema es que me hace bien la precarga, y cuando estoy navegando por la web tb me funciona pero en un momento dado de golpe vuelve al frame 1 y ya no para, empieza a hacer un loop sin hacer caso de nada ni de stop ni de nada... continuamente... me estoy volviendo loca pq no me lo hace al clickar un item especifico, me lo hace al clickar cualquiera al cabo de un rato.... no se... lo he probado todo.. a alguien le ha pasado algo similar?
mi preload es el siguiente (esta en el frame1):
/* 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();
en el frame 2 tengo todas las movies y el siguiente codigo repartido en 2 layers, en una tengo:
import mx.transitions.easing.*;
import mx.transitions.Tween;
#include "lmc_tween.as"
//funciones//
desaparecerHome=function(){
logo.tween ("_alpha",10,3,"");
definicion.tween ("_alpha",0,3);
contenido.tween ("_alpha",100,3,"",0);
}
aparecerdiezafios=function(){
this.contenido.diezafiantesDetalles.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.alphaTo(100,1);
this.contenido.contenidoDownloads.alphaTo(0,1);
this.contenido.contenidoWidget.alphaTo(0,1);
this.contenido.contenidoWidget.gotoAndPlay(10);
this.contenido.contenidoVideo.alphaTo(0,1);
this.contenido.contenidoVideo.gotoAndStop(1);
this.contenido.contenidoEntrevista.alphaTo(0,1);
this.menu.desplegado.gotoAndStop(2);
this.contenido.contenidoLosDiezafios.gotoAndStop(2);
unloadMovieNum(10);
}
aparecerdownloads=function(){
this.contenido.diezafiantesDetalles.alphaTo(0,1);
this.contenido.contenidoDownloads.alphaTo(100,1);
this.contenido.contenidoLosDiezafios.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.gotoAndStop(1);
this.contenido.contenidoWidget.alphaTo(0,1);
this.contenido.contenidoWidget.gotoAndPlay(10);
this.contenido.contenidoVideo.alphaTo(0,1);
this.contenido.contenidoVideo.gotoAndStop(1);
this.contenido.contenidoEntrevista.alphaTo(0,1);
this.menu.desplegado.gotoAndStop(6);
unloadMovieNum(10);
}
aparecerwidget=function(){
this.contenido.diezafiantesDetalles.alphaTo(0,1);
this.contenido.contenidoWidget.alphaTo(100,1);
this.contenido.contenidoWidget.gotoAndPlay(2);
this.contenido.contenidoDownloads.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.gotoAndStop(1);
this.contenido.contenidoVideo.alphaTo(0,1);
this.contenido.contenidoVideo.gotoAndStop(1);
this.contenido.contenidoEntrevista.alphaTo(0,1);
this.menu.desplegado.gotoAndStop(7);
unloadMovieNum(10);
}
aparecervideo=function(){
this.contenido.diezafiantesDetalles.alphaTo(0,1);
this.contenido.contenidoVideo.alphaTo(100,1);
this.contenido.contenidoVideo.gotoAndStop(2);
this.contenido.contenidoWidget.alphaTo(0,1);
this.contenido.contenidoWidget.gotoAndPlay(10);
this.contenido.contenidoDownloads.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.gotoAndStop(1);
this.contenido.contenidoEntrevista.alphaTo(0,1);
this.menu.desplegado.gotoAndStop(4);
unloadMovieNum(10);
}
aparecerentrevista=function(){
this.contenido.diezafiantesDetalles.alphaTo(0,1);
this.contenido.contenidoVideo.alphaTo(0,1);
this.contenido.contenidoVideo.gotoAndStop(1);
this.contenido.contenidoWidget.alphaTo(0,1);
this.contenido.contenidoWidget.gotoAndPlay(10);
this.contenido.contenidoDownloads.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.gotoAndStop(1);
this.contenido.contenidoEntrevista.alphaTo(100,1);
this.menu.desplegado.gotoAndStop(5);
unloadMovieNum(10);
}
aparecerdiezafiantes=function(){
this.contenido.diezafiantesDetalles.alphaTo(0,1);
this.contenido.contenidoVideo.alphaTo(0,1);
this.contenido.contenidoVideo.gotoAndStop(1);
this.contenido.contenidoWidget.alphaTo(0,1);
this.contenido.contenidoWidget.gotoAndPlay(10);
this.contenido.contenidoDownloads.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.alphaTo(0,1);
this.contenido.contenidoLosDiezafios.gotoAndStop(1);
this.contenido.contenidoEntrevista.alphaTo(0,1);
this.menu.desplegado.gotoAndStop(3);
loadMovieNum("diezafiantes.swf",10);
}
stop();
y en la otra:
//apareix tot
fons.tween ("_alpha",100,3,"",0);
logo.tween ("_alpha",100,3,"",1);
definicion.tween ("_alpha",100,3,"",2);
menu.tween ("_alpha",100,3,"",3);
contenido.loguito.enabled=false;
//accions dels botons
contenido.loguito.onRelease=function(){
logo.tween ("_alpha",100,3,"");
definicion.tween ("_alpha",100,3);
contenido.tween ("_alpha",0,3,"",0);
this._parent._parent.menu.desplegado.gotoAndStop(1);
unloadMovieNum(10);
this.enabled=false;
}
//Los diezafios
this.menu.desplegado.LosDiezafios.onRelease=function(){
desaparecerHome();
aparecerdiezafios();
contenido.loguito.enabled=true;
}
this.menu.desplegado.downloads.onRelease=function(){
desaparecerHome();
aparecerdownloads();
contenido.loguito.enabled=true;
}
this.menu.desplegado.TuDiezafio.onRelease=function(){
desaparecerHome();
aparecerwidget();
contenido.loguito.enabled=true;
}
this.menu.desplegado.makingOff.onRelease=function(){
desaparecerHome();
aparecervideo();
contenido.loguito.enabled=true;
}
this.menu.desplegado.entrevista.onRelease=function(){
desaparecerHome();
aparecerentrevista();
contenido.loguito.enabled=true;
}
this.menu.desplegado.diezafiantes.onRelease=function(){
desaparecerHome();
aparecerdiezafiantes();
contenido.loguito.enabled=true;
}
stop();
Eso es todo.... no se que puede pasar para que pete así.... si alguien me pudiera ayudar lo agradeceria muchisimo. Gracias.
noeiona
gracias esta vez si funciona!!!... aunque sigo sin resolver el tema del loading... bufff... el tema es que tengo quep oner un loading por narices pq pesa un poco la pelicula i claro si no lo pongo... maloo....me sorprende muchisimo que me pase esto pq he echomil loadings en mi vida i nunca he tenido problema ninguno... jolines.... voy a seguir peleandome ....
oskitar
El código que te pegué tenía errores, lo hice sin pensar y no revisé que se compilara sin errores, este debería funcionarte.
if (! diezafiantes){
diezafiantes = this.createEmptyMovieClip("diezafiantes",this.getNextHighestDepth());
diezafiantes.loadMovie("diezafiantes.swf");
}else {
diezafiantes._visible=true;
}
noeiona
que puede ser???
noeiona
he hecho todo lo que me has dicho, pero no me carga la movie diezafiantes...
osea esto no me funciona:
//enlugar de loadMovieNum
if ( diezafiantes=null ){
diezafiantes = this.createEmptyMovieClip(this, this.getNextHighestDepth());
diezafiantes.loadMovie("diezafiantes.swf");
}else {
diezafiantes._visible=true;
}
noeiona
mil gracias, qualquier cosa con tal de mejorar!!!!
oskitar
Una vez que hayas cargado la película, loadMovieNum("diezafiantes.swf",10); no hace falta que la borres y la vuelvas a cargar cada 2 por 3.
simplemente ocúltala y muéstrala con la propiedad "_visible".
para eso lo que tienes que hace es cambiar el modo en el que cargas el archivo diezafiantes.swf y controlar que si ya se ha cargado, no se vuelva a cargar, solamente se muestre.
//fuera de la función
var diezafiantes;
//enlugar de loadMovieNum
if ( diezafiantes=null ){
diezafiantes = this.createEmptyMovieClip(this, this.getNextHighestDepth());
diezafiantes.loadMovie("diezafiantes.swf");
}else {
diezafiantes._visible=true;
}
y luego en lugar de los múltiples unloadMovie , Solo tienes que hacer
diezafiantes._visible=false;
xavib
.tween, .alphaTo... yo usaría lo uno o lo otro, ahora es un poco incontrolable no? Es posible que haya un cambio de frame de que termine una de esas animaciones?
Y a parte de eso, yo te diría que comentes absolutamente todo y que dejes las funciones peladas con traces dentro. De esa forma verás si hay algo que se llama más de una vez.
Y aumenta el tiempo del intervalo. Igual antes de que llegue al clear le da tiempo de ejecutarse varias veces...
noeiona
eso tb lo hice :(.....
oskitar
Pues entonces usa el buscador de flash y encuentra todo lo que tenga pinta de _root.play(), play(), nextFrame(), gotoAndStop(1); _root.gotoAndStop(1), gotoAndPlay(1). Y asegurate de que está con su scope correcto.
noeiona
unloadMovieNum(10), es una movie que se carga en un momento determinado cuando clickas a un item del menu, lo de cambiar el play tb lo he probado... y lo peor de todo es que he probado diferentes tipos de loadings y con todos me hace lo mismo, es como si hubiera algo en algun sitio que reinicia todo, lo he revisado mil veces y no logro saber que es, pq es un codigo muy simple y no deberia fallar....
oskitar
Te comento varias cosas las pruebas y me dices que tal te va ahora.
1. setInterval no hace falta que sea lanzado cada 1 milisegundo, es decir 1000 veces por segundo, con que pongas por ejemplo 250ms sobra, y ejecutas la función 250 veces por segundo menos. Así que: intervalId = setInterval(this,"cargando",250);
2. cambia el play(); de la sección del clearInterval por un gotoAndStop(2);
3. ¿Qué es unloadMovieNum(10) ?
noeiona
lo voy a probar zarate... he escrito todo pq no se como explicarlo sino, y creeme que lo he probado absolutamente todo antes de escribir nada, si he llegado a escribir es pq ya no se que mas probar, yo no creo en exceso en los foros, pocas veces me han ayudado, asi que bueno si finalmente me he decidido es pq ya no se me ocurre nada y como tampoco soy superexperta en flash pues alomejor a alguien le pasaba lo mismo y me podia echar un cable....
simplemente... muchas gracias por tu comentario....
juandelgado
Buenas,
He entrado a tu post y lo que veo es:
"A ver si alguien puede ayudarme BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA BLA"......
Es muy complicado que alguien vaya a leerse semejante tocho de código sin indentar aunque hay buenos samaritanos en el mundo, nunca se sabe. Revisa el código, quita todo lo que sea supérfluo y harás más sencillo que alguien te conteste.
Yo normalmente no haría esto, pero bueno, tengo que hacer honor a mi nómina de moderador así que te digo que seguramente no estés borrando/estableciendo el intervalo correctamente por temas de scope o ámbito Prueba a crear el intervalo así:
intervalId = setInterval(this,"cargando",1);
Sacado de la referencia de setInterval para AS2
Salud