¿Quieres registrarte?

Problemas de carga con Loader y ScrollPane en Flash

Por: luccart
3 de Junio del 2009
51 de clabLevel
Otros artículos de luccart
2,170 visitas

He dado con la solución a un problema que me llevaba de cabeza desde hace tiempo, los fallos de carga del componente Loader y del Scrollpane una vez subidos a la web

He leído que mucha gente, al igual que yo, les dan problemas una vez colgada la web, problemas como no hacer el scroll, o el escalado, o salirse del espacio del componente...

He investigado, probado, y reprobado, y he encontrado esta explicación y solución al problema:

Los amigos de bgxcomponents.com publican en su web, que el problema del Loader viene dado porque el indicador de progreso de carga, se queda en _totalBytes -1 hasta completar el último frame, cuando el componente chequea el progreso de carga y aparece en total-1 por 3 veces, lo da por terminado y empieza la reproducción. Por tanto, como no está completo y no tiene las medidas totales, no hace bien el escalado.

Y esto ocurre, cuando tenemos una conexión lenta a internet, por ejemplo con un módem USB de GSM o 3G.

También aportan la solución, la única que funciona de todas las que he probado.

La solución, es hacer una pequeña modificación al código del componente, para que haga la comprobación más de 3 veces, yo he probado varias opciones, y con 5000 veces, carga bien hasta con un modem de 14.400 :D

El código a añadir sería el siguiente: (a poner en el frame 1, antes de los load();)

Código :

import mx.controls.Loader;
//define the maxTries here. 
var maxTries:Number = 5000;

Loader.prototype.checkLoadProgress = function():Void 
{
   var i:String;

   for (i in this.loadList)
   {
      var x:Object = this.loadList[i];
      //trace("loading..." + loadList[i].url);

      x.loaded = x.obj.getBytesLoaded();
      x.total = x.obj.getBytesTotal();
      //trace( x.loaded +"/"+ x.total );

      if (x.total > 0)
      {
         x.obj._visible = false;
         this.dispatchEvent({type:"progress", target:x.obj, current:x.loaded, total:x.total});
         if (x.loaded == x.total)
         {
            if (this.loadedList == undefined)
            {
               this.loadedList = new Object();
            }
            this.loadedList[i] = x;
            delete this.loadList[i];
            this.doLater(this,"contentLoaded");
         }
         else
         {
            //NOTE BGX: also this is different than in the original code where
            //the call to doLater is outside the check "if (x.total > 0)"
            this.doLater(this,"checkLoadProgress");
         }
      }
      else
      {
         if (x.total == -1)
         {
            // sometimes you get a -1 before it starts loading
            if (x.failedOnce != undefined)
            {
               x.failedOnce++;
               //NOTE BGX: the following is the line changed [orig: if (x.failedOnce > 3)]
               if (x.failedOnce > maxTries)
               {
                  this.dispatchEvent({type:"complete", target:x.obj, current:x.loaded, total:x.total});
                  //trace("total == -1 loaded = " + x.loaded);
                  delete this.loadList[i];
                  delete x;
               }
            }
            else
            {
               x.failedOnce = 0;
            }
         }
         //NOTE BGX: also this is different than in the original code where 
         //the call to doLater is outside the check "if (x.total > 0)"
         this.doLater(this,"checkLoadProgress");
      }
   }
};


Y el problema del ScrollPane, viene a ser el mismo, y cambiando la 1a linea, hacemos el mismo proceso con este componente y también funciona, por fín!

Sería algo así:

Código :

import mx.containers.ScrollPane;


Ahora ya podemos usar y aprovechar bien estos 2 componentes sin que nuestras webs le fallen a los usuarios cuando tienen conexiones lentas.

Espero que les sirva a todos.

Carles Hernàndez
www.luccart.net

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas flash actionscript hack

Comentarios | Enviar un comentario
Curioso.. nunca tuve ese problema. Buen tip, seguro ayuda a los que si lo tuvieron (y)
Por: Zguillez
wowwwwwww hace años que no veía código así.

Pero si, es verdad, en el 2004 hice una app donde usaba el SP y claro, era con datos del Server y redibujaba elementos en el SP, con ello simplemente me hizo apreciar las profesiones de abogados y contadores ^^ (con respeto porq casi toda mi familia lo es).

Recuerdo que llegué a la solución refrescando el SP y además de eso, siempre verificando las cargas. Pero bueno ^^ igual es buen aporte :)
Por: eldervaz
si, yo también solucioné, en principio, el problema del scrollpane, con varios refreshpane, pero cuando la conexion a internet es realmente lenta, tampoco funcionaba, y no es plan de poner un boton que diga refresh, no es serio :D

luccart
Por: luccart
Nunca lo había usado, pero que curioso que se comporte así ese componente. Y que ni en actualizaciones lo hayan solucionado.
Por: Otaku RzO
luccart no he podido solucionar este problema del scrollpane, probe el codigo y varias cosas aunque tu comentario era el mas reciente,pero se sigue saliendo, no se que hacer el problema se soluciono con la mayoria de los scrollpane interiores pero en el index se sale ... si me puedes ayudar la web es www.doradoplazace.com
Por: oskarin
Hola como estan he estado buscando solución a un problema que se me presenta con el componente del scrollpane de flash .. el componente carga un moviclip hasta ahi todo perfecto pero el moviclip parece ser muy grande y solo me muestra hasta cierta linea la informacion y el resto en blanco como si hubiera mas texto para que vean bien esta en esta direccion en el boton volunteering http://www.shopinecuador.net/estc/estc_programs.php ojala me puedan ayudar.

gracias
Por: Rafael Rojas-blog
Hola amigo,

el problema no es del ScrollPane, es del bloque de texto, lo estás escribiendo todo en un solo bloque de texto, y tiene un límite.

Tan solo debes partir el texto en varios bloques y listo.

A mi también me pasó.

PD. tienes las películas de esos scrollPane más anchos de la cuenta, como los 16 px que ocupa la barra de scroll, y te hace scroll horizontal.

También podrías mejorar, que el scroll del ScrollPane funcione con la rueda del mouse. para dejarlo perfecto :)

Saludos

Luccart
Por: luccart
Luccart MILLON GRACIAS!!! te debo una :D
Por: Rafael Rojas-blog
Muchísimasss graciasss!!!!! :-D
me sirvió muchísimo el aporte, estuve batallando mucho con el scrollpane :-S hasta ahora ^^
Por: Jimena :)-blog
woow , ni me imaginaba que ahí estaba el error :D
muchass gracias ^^
Por: marcee -blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.