Cargar en 'segundo plano'
Resulta que tengo hecha mi galería de imagenes asín:
<code>//Cargamos foto inicial.
muestraimagen("1.jpg");
//Función que nos muestra la imagen una vez cargada. Si no hay 'imagen',
//vuelve a llamar a la función de carga de la misma.
function muestraimagen(nombre) {
if (!imagen) {
cargaimagen(nombre);
} else {
sale(nombre);
}
}
//Función que carga la imagen. Si los bytes cargados coinciden con los
//totales llama a la función de entrar la imagen.
function cargaimagen(nombre) {
createEmptyMovieClip("imagen", 3);
imagen._alpha = 0;
imagen.loadMovie(nombre);
this.onEnterFrame = function() {
if (imagen.getBytesLoaded()>=imagen.getBytesTotal() && imagen.getBytesLoaded()>100) {
imagen._x = -imagen._width/2;
imagen._y = -imagen._height/2;
delete (this.onEnterFrame);
texto.text="";
entra();
} else {
texto.htmlText = Math.floor(100*imagen.getBytesLoaded()/imagen.getBytesTotal())+"% <FONT COLOR='#80AAD5'>cargado</FONT>";
}
};
}
//Función de efecto 'fade in' de la imagen.
function entra() {
imagen.onEnterFrame = function() {
if (this._alpha>=100) {
delete (this.onEnterFrame);
} else {
this._alpha += 5;
}
};
}
//Función de efecto 'fade out' de la imagen.
function sale(nombre) {
imagen.onEnterFrame = function() {
if (this._alpha>0) {
this._alpha -= 10;
} else {
delete (this.onEnterFrame);
this.removeMovieClip();
cargaimagen(nombre);
}
};
}</code>
y funciona todo a la perfección, junto con los botones siguiente y demás, que llaman a su correspondiente función; pero lo que quiero es que mientras se cargue la siguiente foto, la actual siga viéndose, es decir, realizar una carga en segundo plano. Lo he intentado duplicando el clip contenedor, asignándolo a otro y bueno... tipo a lo de técnicas de ordenación... pero nada, que no me aclaro. Si es que mi desconocimiento sobre AS es bastante...
Alguien tiene alguna sugerencia a partir del código? O alguna otra?
Gracias. Un saludo domestiker@s.
isma
Pongo en negrita lo que estoy intentando a hacer:
Código:
//Cargamos foto inicial.
muestraimagen("1.jpg");
//Función que nos muestra la imagen una vez cargada. Si no hay 'imagen',
//vuelve a llamar a la función de carga de la misma.
function muestraimagen(nombre) {
if (!imagen) {
cargaimagen(nombre);
} else {
sale(nombre);
}
}
//Función que carga la imagen. Si los bytes cargados coinciden con los
//totales llama a la función de entrar la imagen.
function cargaimagen(nombre) {
createEmptyMovieClip("imagen", 3);
createEmptyMovieClip("imagen2", 4);
imagen._alpha = 0;
imagen2._alpha=0;
imagen.loadMovie(nombre);
imagen2=imagen;
this.onEnterFrame = function() {
if (imagen.getBytesLoaded()>=imagen.getBytesTotal() && imagen.getBytesLoaded()>100) {
imagen._x = -imagen._width/2;
imagen._y = -imagen._height/2;
delete (this.onEnterFrame);
texto.text="";
entra();
} else {
texto.htmlText = Math.floor(100*imagen.getBytesLoaded()/imagen.getBytesTotal())+"% <FONT COLOR='#80AAD5'>cargado</FONT>";
}
};
}
//Función de efecto 'fade in' de la imagen.
function entra() {
imagen.onEnterFrame = function() {
if (this._alpha>=100) {
delete (this.onEnterFrame);
} else {
this._alpha += 5;
}
};
}
//Función de efecto 'fade out' de la imagen.
function sale(nombre) {
imagen.onEnterFrame = function() {
if (this._alpha>0) {
imagen2._alpha=100;
this._alpha -= 10;
} else {
delete (this.onEnterFrame);
this.removeMovieClip();
cargaimagen(nombre);
}
};
}
La cuestión es que puedo crear otro 'emptymovieclip' o duplicar el ya existente, si... pero es que no se dónde wevos meterlo, cómo hacerlo... es que he estado probando y nada. Que si en la función de salida un 'mientras no haya cargado imagen que imagen2 se siga mostrando' y cosas así, pero no se... jeje, si es que soy un inculto... con lo bien que se hace todo en visual o c++.
Una ayudita para un viejo vagabundo en esto del AS... ;)
xrv
Odrakir
El solo necesita dos clips para ir intercambiando, de la forma que dices tú ocuparías más memoria, ¿no? y si hablamos de muchas fotos se haría inviable.
Si he entendido lo que dices de alguan manera pierdes la ventaja que te dá cargar las fotos dinámicamente.
si, eso es un factor a tener en cuenta (la puta memoria jejeje) ... entonces casi mejor hacer lo que tu has comentado, pero añadiendo que las fotos se quedan en la caché y da igual si las vas cargando a lo guarro en un clip contenedor. Luego una vez cargadas haces un loadMovie y como quien no quiere la cosa cargan al momento, si no se ha cargado pues metes preload y listos :)
odrakir
El solo necesita dos clips para ir intercambiando, de la forma que dices tú ocuparías más memoria, ¿no? y si hablamos de muchas fotos se haría inviable.
Si he entendido lo que dices de alguan manera pierdes la ventaja que te dá cargar las fotos dinámicamente.
xrv
Odrakir
Es eso lo que tienes que hacer, crear otro clip contenedor en otro nivel, nada más...
Así podrás tener las dos y cuando haya cargado la segunda borras la primera.
yo más que ir creando y borrando lo que haría sería tener un array con referencias a clips creados al vuelo e ir navegando por ese array (por sus posiciones) ocultando y mostrando dichos clips (con sus fotos cargadas gradualmente) mediante, por ejemplo, el _visible.
si saco un rato monto un script pero lo veo chungo hoy
odrakir
Es eso lo que tienes que hacer, crear otro clip contenedor en otro nivel, nada más...
Así podrás tener las dos y cuando haya cargado la segunda borras la primera.