el 12.03.2009 a las 14:14  por dourado· 12 comentarios

Buenas,

Llevo algunos dias con un problema, para cargar(hacer load) a uma sequencia de 7 jpg's...
El problema es que si publico no va pero se aún abierto el copilador vuelvo a publicar si me lee las img's... Los mismo ocurre online. A la primera no va pero luego al hacer refresh ok....
Tengo en el codigo:
url = arrayFotosHome[plus];
elLoader = new Loader();
var urlReq:URLRequest = new URLRequest(url);
elLoader.load(urlReq);

var onComplete:Function = function(loadEvent:Event)
{
var b:Bitmap = loadEvent.target.content as Bitmap;
elLoader.unload();
container.addChildAt(b, plus);
yo.dispatchEvent(new Event("loadHecho"));
plus++

elLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
elLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
elLoader.contentLoaderInfo.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
elLoader.contentLoaderInfo.removeEventListener(Event.OPEN, loaderOpen);
elLoader.contentLoaderInfo.removeEventListener(Event.INIT, loaderStarted);

loadImagenes();
}

elLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete, false, 0, true);
elLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);

elLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus, false, 0, true);
elLoader.contentLoaderInfo.addEventListener(Event.OPEN, loaderOpen, false, 0, true);
elLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderStarted, false, 0, true);

Teneis idea?
Salud2;
Gracias++;

tpmmds

tpmmds el 12.03.2009 a las 15:56

Hola:

Se me ocurre, que como en cada ciclo eliminas los listeners y los añades de nuevo, y el garbage colector no es precisamente el rey de la velocidad (aunque tienes activada la vinculación débil puede que no elimine de elLoader el listener antes de añadir el siguiente).

Yo dejaría los listeners durante todo el proceso y los eliminaría al final cuando el valor de plus sea igual al número de imágenes a cargar. Tal como lo tienes ahora, pero los removeEventListener dentro de un if (plus++ == numeroImagenes)

Un saludo.

dourado

dourado el 12.03.2009 a las 16:59

BuenAS Tpmmds.
Pues igual...aunque le quité todos los removeListeners no va...
Pero sigo si entender abri el flash(he vuelto de comer) y la primera vez que publico va perfecto..la segunda no... Intento una o otra vez y va y no va...(matanto los listeners al final, es igual...)

Saludos(gracias++)

tpmmds

tpmmds el 12.03.2009 a las 18:23

Hola:

Te posteo aquí un fla con el código. Cuidado que he escalado las imágenes al 20% para poder verlas
Cargador imágenes

"Creo" que carga la secuencia de imágenes. Me he acostumbrado a BulkLoader para hacer las precargas de assets y con el Loader estoy un poquillo desengrasado :-)

Un saludo.

dourado

dourado el 12.03.2009 a las 21:29

BuenAS tpmmds.
Gracias por el archivo! :)
Infelizmente el tuyo es praticamente igual al mio y tanpoco funcionaba bien!...
Es muy raro que el Loader(en este caso) funcione de forma tan aleatoria y que flash no me devuelve ningun error en ninguna parte...
Lo he solucionado con el BulkLoader, y ya está :) !...

GraciAS++
Saludos.

Ventd'Aval

Ventd'Aval el 13.03.2009 a las 09:25

mmm, ojito con el unload, que lo mas seguro es que te este haciendo un dispose del bitmapData del loader, por tanto el Bitmap que referenciaste justo antes del unload quedaría vacio (y no tiraria error, pq es unicamente el bitmapData asociado el que se borra).
Porque no usas directamente el Loader como clip para añadir al displayList?
Otra opción es que te vayas creando bitmapDatas+Bitmap y haciendo draw con cada JPEG, pero creo que es bastante mas facil, legible y straight-forward usar directamente el Loader ;)

Saludos...

tpmmds

tpmmds el 13.03.2009 a las 11:44

Hola:

Pues sí, casi seguro es por el unload. No me dí cuenta que estaba esa línea. De hecho, el código del Fla no lleva unload, y "creo" que carga todas las imágenes, incluso subido a un servidor.

Un Loader es un "portador", por así decir. Cuando "movemos" el content del Loader a otro sitio con addChild, se elimina de dicho Loader. Posiblemente esté pasando eso: cuando hace el unload después de añadir la imagen cargada, la elimina, y por eso hay algunas que desaparencen.

Imagino que debería dar algún tipo de error cuando hace el unload, ya que va a intentar "descargar" algo que ya no tiene el Loader.

Como dice Ventd'Aval, elimina el unload.

Un saludo.

dourado

dourado el 13.03.2009 a las 13:06

BuenAS,

Gracias a los dos por los coments.
Pues va a ser que no... Ya había eleminado el unload y también todos los remove de los listeners y nada.
Vent, si suelo, dependiendo del caso, usar el Loader pero por temas de optimización usé el bitmap.

Aparte de la secuencia inicial la app carga unos 40(o los que sean) thumbs y aquí también me viene el mismo problema.
Al final como dice recorri al bulkloader pero aún no me va a 100%.....
Estoy en ello( y está los coj++)...

Salud2.

tpmmds

tpmmds el 13.03.2009 a las 13:45

BuenAS:

Estoy en ello( y está los coj++)...

Sí, suele pasar... y después cuando te das cuenta de que es un punto y coma puesto en un sitio que no debía, se te queda una cara :-)

Un saludo

Ventd'Aval

Ventd'Aval el 16.03.2009 a las 13:30

¿Estas cargando las imagenes de un servidor diferente al del SWF? recuerda que en ese caso no puedes usar BitmapDatas ;)

dourado

dourado el 16.03.2009 a las 18:04

BuenAS,
Mira si Dios existe seguro que tiene el player 11 de adobe...
Vaya marron... pues resulta que ni con el bulkloader el tema funciona al 100%. La carga de archivos se "muere" de forma aleatoria, sin señal de vida... Le meti varios tipos de listeners para buscar el error y nada. En el browser el mayor numero de errores se dan en firefox(mac). Safari(mac) y explorer/firefox(pc) ok.
Para solucionar el problema baje todas las fotos del server unas 270's incluindo los thumbs.. y con el photoshop le he vuelto a gravar en jpg, para no tener ningun problema con perfiles de color o alguna otra historía rara... Para reducir el impacto de la carga de las fotos hice en dos pasos los preloader's. Una vez que terminé uno hay un pequeño fade de un logo y así que esté terminé paso al segundo preloader. Desde esta forma parece funcionar.

Ah una nota tube que declarar los listeners sin ...false, 0, true); El garbage colector se "despierta" y puede hacer daño.
Algunas fotografias estaban cargando y creo(porque no puedo ver lo que pasa en garbage) el remove del anterior loader mata la carga de la nueva carga que viene a camino, aunque le meta un IF para solo haga a la última puede resultar que el usario al clickar en otro thumb y el proceso se corte...

¿Estas cargando las imagenes de un servidor diferente al del SWF? recuerda que en ese caso no puedes usar BitmapDatas ;)

Están en el mismo!

Gracias a los dos!!! :)
Salud++

tpmmds

tpmmds el 20.03.2009 a las 10:47

BuenAS:

Me he tropezado con este post que habla de un problema similar:

Am I Crazy? Question About Using AS3 Loader

Pudiera ser que se trate de algún bug en la versión de FP9 que tengas. Yo tengo la 9.0.159 y exijo en las opciones de publicación la 9.0.124.

Una forma rápida de ver la versión de FP que tienes es hacer un

trace(Capabilities.version)

Por cierto, el post hace referencia a otro problema:

Bug corregido en FP10

sobre el error que aparece cuando extraes el contenido de un Loader e intentas cargar nuevos contenidos en él, que ha sido corregido en FP10

Por temas como este, cuando he utilizado la clase Loader para cargar imágenes, lo único que hacía era quitarle los listeners cuando acababa la carga y añadirlos directamente al sprite/movieClip contenedor.

Un saludo.
Un saludo.

dourado

dourado el 20.03.2009 a las 12:23

BuenAS tpmmds!

Yo me imagino que el tema está en el player, pero por orden del cliente tiene que estar publicado en 9 y termino quedando en 9,0,115, aunque me deseo fuera de haber publicado en FP10 y pasar los varios arrays a vector. Solo con esto me imagino que el flujo del codigo dentro de la app sería mejor.
En cuanto al Loader utilizé el BulkLoader, que también no terminaba de funcionar dado que se perdía en el camino... El hecho de que la imagenes sean muy pequeñas 1/2/4k's el proprio loader del BulkLoader también se vuelve "loco". El "truco", por decir, fue hacer todo en 2pasos, cargando parte en un loader y una vez que termina, otra parte en otro loader.
Ahora todo funciona y va fluido y el cliente contento!
Y tomando de ejemplo la vieja frase "si está bien no lo toques!" pues eso! :)

GraciAS )

Saludos.

Entra o regístrate para comentar