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

Pregunta (absurda?) sobre esta precarga

Estas en el tema de Pregunta (absurda?) sobre esta precarga en el foro de Flash y Actionscript en Foros del Web. Hola a todos, Me explico, tengo una película index con botones que llaman a .swf externos. En el primer fotograma de la película principal he ...
  #1 (permalink)  
Antiguo 07/09/2007, 05:46
 
Fecha de Ingreso: agosto-2004
Mensajes: 129
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta (absurda?) sobre esta precarga

Hola a todos,
Me explico, tengo una película index con botones que llaman a .swf externos. En el primer fotograma de la película principal he hecho un preloader para los .swf externos, con el siguiente código:

var vacio:MovieClip = this.createEmptyMovieClip("vacio", 1);
vacio._x = 443;
var loop:MovieClip = this.createEmptyMovieClip("loop", 0);
var vacio:MovieClip;
linea._xscale = 0;

function cargador(foto) {
vacio.loadMovie(foto);

loop.onEnterFrame = function() {
total = vacio.getBytesTotal();
cargados = vacio.getBytesLoaded();
t = Math.floor((cargados*100)/total);
campo.text = t+"% cargado";
linea._xscale = t;

if (t>=100) {
delete loop.onEnterFrame;
campo.text = "";
linea._xscale = 0;

}
};
}
cargar_discos.onPress = function() {
//cargador("discos.swf?id="+random(1000)); //para cargar uno diferente siempre
cargador("discos.swf");
};


Mi pregunta es, ¿qué debo modificar en el script para que el clip vacío me lo cree en una capa determinada de mi película principal? Seguro que es una tontería, pero lo mío no es el As, soy novato y me pierdo...

Y si me pudiérais decir como evitar el caché, es decir, que no salga la precarga cada vez que entro en la sección, ya sería fantástico!

Gracias!!
  #2 (permalink)  
Antiguo 08/09/2007, 05:54
 
Fecha de Ingreso: agosto-2004
Mensajes: 11
Antigüedad: 13 años, 3 meses
Puntos: 0
De acuerdo Re: Pregunta (absurda?) sobre esta precarga

var vacio:MovieClip = this.createEmptyMovieClip("vacio", 1);
Con esto le estas diciendo que cree un movieclip en la escena en la que estas: this, el nivel de profundidad (o level) de la capa en la que quieres colocarlo, depth, en este caso 1
Busca en la ayuda con depth (profundidad) y seguro encuentras varias funciones.

Ahora si lo que q uieres es que te lo coloque en la siguiente capa libre de la escena activa tienes esto:

var vacio:MovieClip = this.createEmptyMovieClip("vacio", this.getNextHighestDepth());
  #3 (permalink)  
Antiguo 09/09/2007, 04:35
Avatar de Solid  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 180
Antigüedad: 14 años, 10 meses
Puntos: 0
Re: Pregunta (absurda?) sobre esta precarga

Si no querés que salga la precarga cada vez que entres, entonces no tenés que evitar el caché sino ABUSAR descdamente de el!!! :P

De todas maneras, si querés evitar el caché lo mejor que podés hacer es pasar variables (cuales quiera, no importa en realidad) a la URL de lo que estás cargando y de esa forma Flash interpretará que es una URL distinta (o bien una nueva versión) y no leera desde el caché sino desde 0 otra vez.

La mejor opción para hacer esto es crearse un objeto Date y a usar una URL similar a esto...

loadMovie("mi_url.swf?var_1=" + fecha.getSeconds() + "var_2=" + fecha.getMillieSeconds() ....... etc etc etc

Y listo...te evitas el caché ;)
(excepto una vez al año, que todas las variables pueden llegar a coincidir y levantar desde el caché :P )

El tema de las profundidades puede llegar a ser MUUUUUUUUY engorroso, por lo cual yo siempre recomiendo organizar el código por capas de la misma manera que lo organizarías en el timeline, de manera que siempre uses el .getNextHighestDepth() y como primero haces las llamadas de lo que debería quedar "más abajo" entonces se organiza correctamente siempre.

En el caso de que no puedas hacer esto y necesites incrustar un objeto por el medio, entonces lo que te recomiendo es en el timeline meter un MC vacío con un nombre tipo "profundidad_deseada" (o lo que más te guste), entonces cuando haces la carga del nuevo objeto simplemente llamas al nuevo_objeto.swapDepths(profundidad_deseada);

Si después por el motivo que fuera vas a descargar ese objeto, entonces lo vuelves a llamar para que profundidad_deseada recupere, justamente, la profundidad deseada de manera que en la próxima incrustación te queden bien las profundidades al llamar al .swapDepths otra vez (sino, "recuperas" la profundidad de ese MC vacio entonces este quedaría con la profundidad que haya tenido la primera incrustada, osea que la segunda iría a parar a cualquier lado, muy probablemente arriba de todo)



PS: lo del caché es en serio eh!. Si REALMENTE querés evitar las precargas, entonces lo mejor que podés hacer es cachear, y eso sucede por default asique ni te preocupes. En el caso de que quieras optimizar las cargas, entonces en los tiempos "muertos" de tu película podrías ir cargando los demás archivos, de manera que se vayan cacheando por ejemlpo mientras el usuario mira una intro que ya se terminó de cargar, podrías tirar algo así...

pre_cache.loadMovie("index.swf",this.getNextHighes tDepth(),{_alpha:0});
pre_cache.onLoad = function(){removeMovieClip(this)}

y listo, aprovechas los tiempos "muertos" de navegación para ir cargando los demás archivos...
Por cierto, esto es una técnica SUMAMENTE util cuando hay mucho streaming y cosas por el estilo
__________________
Just because I rock doesn't mean I'm stone
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 10:20.