Comunidad de diseño web y desarrollo en internet online

Al pulsar MC visualizar precarga en otro MC

Citar            
MensajeEscrito el 15 Nov 2005 10:33 am
Hola a todos, a ver si alguien me puede echar una mano, para realizar la siguente precarga de fotos. No soy muy experimentado asi que os agradezco mucho la ayuda.

Tengo un SWF con 2 escenas. Escena 1 pregarga de la pelicula, Escena 2 pelicula.
En la escena 2 tengo un unico fotograma con el movie clip (mc a partir de ahora) "mosaico". Dentro del mc "mosaico" tengo tambien un unico fotograma con 31 capas.
Las 30 primeras capas tiene cada una 1 mc, llamados "mc1" en la capa1, "mc2" en la capa2, "mc3" en la capa3 y asi sucesicamente hasta 30. Cada "mcNº" tiene en su interior una foto pequeña, y al pulsar sobre cada uno de ellos se carga una foto externa grande en el mc vacio de la ultima capa, la 31, llamado "cargafoto"
Para cargar la foto externa en el mc "cargafoto", uso el siguiente script que está en cada uno de los 30 "mcNº" (situados en cada una de las 30 primeras capas)

Codigo para "mc1" situado en capa1 (superior): (los demas son similares)

on (press) {
_parent.cargafoto._visible = false;
_parent.cargafoto.stop()
b_total = _parent.cargafoto.getBytesTotal();
b_loaded = _parent.cargafoto.getBytesLoaded();
porcentaje = int((b_loaded/b_total)*100);
// si ya se cargaron todos los bytes
if (b_loaded>=b_total) {
_parent.cargafoto._visible = true;
//caja de texto dinamico con nombre de instancia "txt1" y var "tantoxcien1"
//situado en la capa1
_parent.txt1._visible = false;
_parent.cargafoto.play()
// si no...
} else {
// genera el output en esta forma: 75% cargado
//caja de texto dinamico con nombre de instancia "txt1" y var "tantoxcien1"
_parent.tantoxcien1 = Math.round(porcentaje)+"% cargado";
}
}
on (release) {
pelicula="foto_1.jpg";
loadMovie(pelicula, "_parent.cargafoto")
}


Lo que quiero hacer es poner una precarga en cada "mcNº" de tal manera que al pulsar en cualquiera ellos y mientras no se carga la foto externa me aprarezca "Cargando tanto%" para que no parezca que al pulsar cualquier "mcNº" no se carga nada ya que tarda un poco en cargar cada foto. Ya he probado con varias opciones y nada. Si a alguien se le ocurre un script valido se lo agradeceria mucho. De esta forma al pulsar cada "mcNº" carga la foto grande correspondiente en "cargafoto" pero no muestra el progreso de carga. ¿Alguien sabe como hacer para que muetre esta precarga?

Un saludo y gracias por las sugerencias y ayuda.

Nota: "mosaico", "mcNº" y "cargafoto" son los nombres de instancia de cada mc. "txtNº" y "tantoxcienNº" son el nombre de instancia y variable respectivamente de cada caja de texto dinamico situadas cada una en una capa de la 1 a la 30.

Version flash: MX 6.0

Por Laplace

1 de clabLevel



 

msie
Citar            
MensajeEscrito el 16 Nov 2005 05:33 am
Hola, bueno mira, te dire que segun el codigo que pones:

Código :

on (press) { 
_parent.cargafoto._visible = false; 
_parent.cargafoto.stop() 
b_total = _parent.cargafoto.getBytesTotal(); 
b_loaded = _parent.cargafoto.getBytesLoaded(); 
porcentaje = int((b_loaded/b_total)*100); 
// si ya se cargaron todos los bytes 
if (b_loaded>=b_total) { 
_parent.cargafoto._visible = true; 
//caja de texto dinamico con nombre de instancia "txt1" y var "tantoxcien1" 
//situado en la capa1 
_parent.txt1._visible = false; 
_parent.cargafoto.play() 
// si no... 
} else { 
// genera el output en esta forma: 75% cargado 
//caja de texto dinamico con nombre de instancia "txt1" y var "tantoxcien1" 
_parent.tantoxcien1 = Math.round(porcentaje)+"% cargado"; 
} 
} 
on (release) { 
pelicula="foto_1.jpg"; 
loadMovie(pelicula, "_parent.cargafoto") 
}


... hay algunas cosas claras del porque no te muestra la precarga, lo ke sucede es que estas poniendo en primer lugar el codigo que debe realizar toda esta tarea dentro del onPress y este se ejecuta primero que el onRelease y muy importante se ejecuta un sola vez, es decir que no se mantiene ejecutandose constantemente, para eso estan los onEnterFrame; ahora por lo de quien se ejecuta primero y quien despues, al preguntar por los bytes lo mismo leidos que totales no son los de la imagen que ya tienes los ke necesitas, sino los de la que vas a cargar, por tanto no puedes preguntar por estos datos antes de mandar a cargar la imagen.

Bueno mira, trate de expicarte rapidito algo para que entiendas lo ke te sucede, espero me hallas entendido, es que no dispongo de mucho tiempo ahora mismo para una explicacion mas larga, solo aconsejarte que le des una miradita a la clase MovieClipLoader, que esta muy buena y tiene sus mejoras para esto de las precargas.

Espero haber ayudado en algo, de todos modos en cuanto tenga un time reviso el tema de nuevo.

S@lu2s 8) .

Por pcreide

25 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 16 Nov 2005 06:33 pm
Gracias pcreide por tu aportacion, me he documentado sobre la clase MovieClipLoader como me indicaste y ya he solucionado el problema. Lo que he echo es actualizar mi flash MX v6 a la v8 pro y modificar ligeramente el fla que tenia. Pongo el codigo que he usado por si a alguien le interesa (seguro que se puede mejorar pero para mis conocimiestos esta bien).

Mantego todo tal cual puse en mi primer post (salvo el codigo, claro!!!).
Tenia MC "mosaico" y dentro de este en 30 capas (de 1 fotograma) cada uno de los MC "mcNº" y en la ultima el MC "cargafoto", bien

He creado una capa llamada accion encima de la capa que contiene a "mosaico" y en el fotograma he puesto:

_root.mosaico.tantoporcien_txt._visible = false;
var loader_mcl:MovieClipLoader = new MovieClipLoader();
var lListener:Object = new Object();
lListener.onLoadStart = function() {
_root.mosaico.tantoporcien_txt._visible = true;

};
lListener.onLoadProgress = function(loading, loaded, total) {
_root.mosaico.tantoporcien_txt.text = parseInt(String((loaded*100)/total))+"%";
_root.mosaico.tantoporcien_txt._visible = true;
};
lListener.onLoadComplete = function(loaded) {
_root.mosaico.tantoporcien_txt._visible = false;
};
loader_mcl.addListener(lListener);


Dentro de mosaico, he creado una primera capa llamada acciones y en el fotograma he puesto el codigo: (recordar tengo 1ª capa acciones, capa de 2 a 31 los MC "mcNº" y capa 32 "cargafoto")

pelicula = Array(30);
for (i =1; i <= 30; i++) {
pelicula[i]="foto"+i+".jpg";
}
mc1.onPress = function() {
_root.loader_mcl.loadClip(pelicula[1], cargafoto);
};
mc2.onPress = function() {
_root.loader_mcl.loadClip(pelicula[2], cargafoto);
};

//... asi sucesivamente hasta mc30 //

mc30.onPress = function() {
_root.loader_mcl.loadClip(pelicula[30], cargafoto);
};

En esta capa (acciones) he puesto el texto dinamico con nombre de instancia "tantoporcien_txt".

Y esto es todo, espero que a alguien le sirva de ayuda.

¿Por cierto hay alguna forma de mejorar lo de mc1.onPress..., mc2.onPress..., ..., mc30.onPress... para que no tenga que repetir el mismo codigo 30 veces??? ¿sera usando un array? Si a alguien se le ocurre pues le agradeceria mucho su aportacion.

Podesis ver el SWF funcionando en: http://jdweb.aspfreeserver.com/index.asp?id_idioma=1&seccion=4.15

Un saludo.

Por Laplace

1 de clabLevel



 

msie
Citar            
MensajeEscrito el 16 Nov 2005 06:36 pm
Pues muy bien, Bienvenidos a ambos, y gracias por postear la solución, así aprendemos todos!!!

8)

Por Sisco

BOFH

3700 de clabLevel

12 tutoriales
4 articulos

Genero:Masculino   Bastard Operators From Hell

Catalunya

firefox

 

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