This entry was posted
on Martes, Enero 3rd, 2006 at 7:14 pm and is filed under actionScript.
You can follow any responses to this entry through the RSS 2.0
feed.
Responses are currently closed, but you can trackback from your own site.
The URI to TrackBack this entry is: http://www.after-hours.org/blog/archives/2006/01/03/sistema-de-precarga-multiple/trackback/
Enero 4th, 2006 at 12:58 pm
Es genial.. yo estaba desarrollando uno parecido.. pero ahora se me plantean unas dudas.. a cerca del buen uso de este preload, y es
¿Como hacer MC’s Modulares.. con sus efectos e historias… como separar las capas?
MC de grafico
MC Sonido
MC Datos
Los mas claros son los 2 últimos.. pero el de Gráficos? uouuu se me hace complicado pensar como montar un site asÅ
Alguna help? algo que oriente sobre el tema…
Gracias y disculpad las molestias.
Enero 4th, 2006 at 1:46 pm
Muy bueno Toni, hace tiempo que me llevo preguntando cómo desarrollar precargas de este tipo.
Una cosa, no se qué estoy haciendo algo mal (me extraña porque has hecho el uso supersencillo) pero me pasa algo raro:
Si publico como flash 7 me da el siguiente error:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 13: Type mismatch in assignment statement: found Void where TextField is required.
var percent_txt:TextField = _root.createTextField("text", this.getNextHighestDepth(), 15, 0, 0, 0);
Y si publico como flash 8 me muestra los elementos antes de que se cargue el último item del array. He colocado un trace y por lo que veo el valor de currentItem las dos primeras veces es igual a 0… no entiendo que puede ser
¿alguna pista?
Enero 4th, 2006 at 8:22 pm
Hola Marck, no entiendo bien el problema que planteas. Lo ideal para un sistema como este es tener la aplicación dividida en módulos. Pe: sonido, galeria de fotos si la hay, etc … cada módulo es independiente y pones las capas que quieras. En cuanto a los .swf que cargas en el swf principal, puedes ponerlos en capas si cada clip de pelicula contenedor (que especificas en el Array) está en una determinada capa, pero no es necesario ya que gestionaras el indice de apilamiento en el momento de cargar la pelÃcula (cada pelicula cargada ocupada un nivel superior)
Drus.,
ocurre que escribà el código con flash 8 solo por una razón: Flash 8 visualiza los trace de los eventos del objeto movieclipLoader en local. Flash mx 2004 no. Me explico:
Si en flash MX 2004 escribes:
movieClipLoader.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
trace(Math.round((loadedBytes / totalBytes) * 100) + “%")
}
No pasará nada. En cambio en flash 8 si, por eso no me di cuenta del fallo que comentas y que aunque he solucionado, no tengo muy claro. Simplemente cuando declares la variable percent hazlo sin declarar el tipo:
var percent_txt = blablabla
En cuanto a lo que comentas que muestra los elementos antes, no estoy seguro, pero puede ser que los archivos que cargas no sean muy pesados y por tanto todo sucede tan rápido que produce ese efecto (voy a repasar ese aspecto a ver que puede ser)
He hecho un par de cambios muy peqeños, pongo aqui el código (hasta que no lo vea claro no lo cambio en el post)
Stage.align = “TL";
Stage.scaleMode = “noScale";
// – variable declaration
var itemsArray:Array = new Array();
var itemsArray:Array = new Array();
itemsArray[0] = {url:"img/fondo1.jpg", target:"bg_mc", msg:"Cargando background", x:0, y:0};
itemsArray[1] = {url:"menu03.swf", target:"menu_mc", msg:"Cargando menú", x:110, y:50};
itemsArray[2] = {url:"dynamicVolumeSlider.swf", target:"sound_mc", msg:"Cargando sonido", x:100, y:10};
// –
var currentItem:Number = 0;
var totalItems:Number = itemsArray.length;
var movieClipLoader = new MovieClipLoader();
var percent_txt = createTextField("text", this.getNextHighestDepth(), 15, 0, 0, 0);
percent_txt.html = true;
percent_txt.autoSize = true;
percent_txt.setNewTextFormat(new TextFormat("Verdana", 10, 0xffffff, false, false, false, null, null, “right"));
// – init function
init = function () {
loadItems();
};
// – load the items function
loadItems = function () {
if (currentItem < totalItems) {
newContainer_mc = this.createEmptyMovieClip(itemsArray[currentItem].target, this.getNextHighestDepth());
newContainer_mc._y = -Stage.height;
newContainer_mc._alpha = 0;
movieClipLoader.loadClip(itemsArray[currentItem].url, newContainer_mc);
}
};
// – onLoadProgress function
movieClipLoader.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
percent_txt.htmlText = itemsArray[currentItem].msg + ‘ ’ + ‘ | ‘ + ‘ ’ + (currentItem + 1) + ‘ ’ + “de” + ‘ ’ + totalItems + ‘ ’ + ‘ ’ + ‘ | ‘ + Math.round((loadedBytes / totalBytes) * 100) + “%";
trace(percent_txt.text);
};
// – onLoadComplete function
movieClipLoader.onLoadComplete = function() {
currentItem++;
if ((currentItem) == totalItems) {
percent_txt.removeTextField();
for (var i = 0; i < totalItems; i++) {
eval(itemsArray[i].target)._x = itemsArray[i].x;
eval(itemsArray[i].target)._y = itemsArray[i].y;
eval(itemsArray[i].target)._alpha = 100;
}
}
loadItems();
};
init();
Saludos
Enero 5th, 2006 at 10:43 am
Perfecto Toni, va como la seda. Era yo que la estaba cagando, me habÃa dejado un mc llamado “text_mc", porque al principio no vi que creabas los holder por código… los cree a mano, y luego los borré pero me dejé uno
El error que en el 7 es un poco rarito no? ya và que se solucionaba no definiendo el tipo pero me parece incomprensible… yo no veo el Type mismatch por ningún lado, no se porqué se empeña en que es Void…
En fin, muchas gracias Toni.
Enero 6th, 2006 at 1:51 pm
Hola,
podemos haber un ejemplo concreto (fla), s\’il vous plait
Yaya
Enero 6th, 2006 at 9:30 pm
OK Yaya, pondré un ejemplo.
Saludos.
Enero 10th, 2006 at 12:30 am
Era lo que buscaba!! pero para variar dudas de un negado….Que hay que escribir donde pone target despues de especificar los swf a cargar??
GRACIAS
Enero 10th, 2006 at 6:24 am
Hola David,
target, será el nombre de instancia de un clip de pelÃcula que se crea dinámicamente. Justamente donde dice:
this.createEmptyMovieClip(itemsArray[currentItem].target,this.getNextHighestDepth());
saludos
Enero 10th, 2006 at 1:50 pm
Vaya lio, jajaja…casi espero a k pongas el ejemplo para descargar k me entero mejor….
Enero 13th, 2006 at 8:43 am
One question…. La clase MovieClipLoader sigue teniendo los problemas que tenia en determinados navegadores por culpa del plugin, o ya no.
Enero 22nd, 2006 at 9:12 pm
Gracias y sigue asi
Enero 23rd, 2006 at 1:13 am
Si utilizas este sistema, el archivo principal, cumple la única misión de cargar los módulos de que se compone la aplicación. Por tanto, no necesita precarga.
Si quieres hacer precarga de este, puedes consultar en el blog hay varios sistemas de precarga. Lo que tendrias que hacer, es una vez precargado el principal, aplicar lo que se explica en este articulo en el fotograma 2.
saludos
Enero 24th, 2006 at 10:17 am
Hay una cosa que se me escapa o no entiendo. Yo he usado el código y en fin, me carga los elementos bien solapandolos unos encima de otros. Hasta aki perfecto si el codigo se usa para inicializar el entorno, pero yo por ejemplo lo uso para, mediante el menu, cargar las secciones y me falla, o mejor dicho me va solapando capas sin parar. Si le meto un removeClip del futuro clip a crear, me pierde el actual antes de hacer la precarga.
¿Como deberia usar este sistema para cargar subsecciones? ¿Deberia implementar un sistema secundario para cargar modulos aislados?
Enero 24th, 2006 at 10:31 am
He puesto lo siguiente en cada boton:
myBTN.onPress = function() {
_root.elementos = _root.elementos.splice(0);
_root.elementos[0] = {id:"externo_mc",url: “../swf/menus_secciones.swf",x:0,y:0};
_root.initLoader();
}
y en initLoader he añadido:
currentItem = 0;
Enero 24th, 2006 at 7:12 pm
Febrero 20th, 2006 at 2:12 pm
Hi,
el codigo no funciona …..

podemos tener un fla, para un pequeño francés en sufrimiento
Yaya
Merci beaucoup
Abril 21st, 2006 at 5:39 am
:smilemuy bueno
Mayo 9th, 2006 at 12:02 pm
! espero que me podais echar un cable, estoy hecha un lio!!
tengo un flash con una movie (mc) que contiene varios botones, cada boton llama a un .swf que a su vez contiene otra movie (mc) con otros botones. todo se abre pero no consigo hacer los .swf ya utilizados.
querria dar una orden tipo “al clicar otro boton, elimina lo existente”
creo que el problema es que todo se carga en diferentes preloders
gracias!!
Mayo 9th, 2006 at 4:21 pm
Acid Reflux
Acid Reflux
Mayo 10th, 2006 at 5:30 am
Hola Susana, efectivamente, el problema es que abres cada .swf en un clip de película nuevo. Te recomiendo que consultes alguno de los muchos artículos sobre precarga que hay en el blog. Te dejo los enlaces para facilitarte la tarea:
http://www.after-hours.org/blog/index.php?s=precarga&Submit=Go%21
http://www.after-hours.org/blog/index.php?s=preloader&Submit=Go%21
Saludos
Mayo 10th, 2006 at 10:17 am
o, gracias! me he descargado algunos archivos, espero encontrar la soluciòn!
otra cosa: no consigo “submit comment” en el ejemplo de “scroll bàsico", alguien conoce al autor?? no consigo que flash me importe el texto una vez modificado el archivo original.
serà porque trabajo en macintosh??
+ querrìa cambiarle el nombre a la variable pero no la encuentro!!
(gracias)
Mayo 10th, 2006 at 4:17 pm
el tema del texto lo he solucionado, un despiste!