Comunidad de diseño web y desarrollo en internet online

Problema para parar una carga. Loader

Citar            
MensajeEscrito el 15 Nov 2008 07:47 pm
Hola gente de Cristalab... por aqui migrando del 2.0 al 3.0 poquito a poco con ejemplos que me ayuden a comprenderlo.
Hoy me disponia a hacer una pequeña galeria de imagenes importadas con unos simples botones de alante, atras, inicio, fin y un preload comun para todas ellas.

Código :

var i:int=0;
var num_fotos:int=6;
var por_txt:TextField = new TextField();
var ClassReference:Class = getDefinitionByName("barra") as Class;
var instancia:Object = new ClassReference();
var por:uint = 0;

var ldr:Loader = new Loader();

function cargar(i):void
{
    configurarListeners(ldr.contentLoaderInfo );
   ldr.x=100;
   ldr.y=100;
   ldr.load(new URLRequest("img/0" + i + ".jpg"));
    addChild(ldr);
}
function configurarListeners(disparador:IEventDispatcher):void
{
    disparador.addEventListener(Event.COMPLETE, completo);
    disparador.addEventListener(Event.OPEN, comienzo);
    disparador.addEventListener(ProgressEvent.PROGRESS, progreso);
    disparador.addEventListener(IOErrorEvent.IO_ERROR, error);
    disparador.addEventListener(Event.UNLOAD, descargado);
}
function comienzo(e:Event):void
{
    trace("Comenzo la carga" + e);
    addChild(DisplayObject(instancia));
    DisplayObject(instancia).x=100;
    DisplayObject(instancia).y=100;
    por_txt.x=100;
    por_txt.y=105;
    addChild(por_txt);
    por_txt.text = "0%";

}
function progreso(e:ProgressEvent):void
{
    por = Math.round((e.bytesLoaded*100)/e.bytesTotal);
    por_txt.text=String(por)+" %";
    DisplayObject(instancia).width=por*6;
}
function completo(e:Event):void
{
    trace("Se completo la carga" + e);
    removeChild(DisplayObject(instancia));
    removeChild(por_txt);
}
function error(e:IOErrorEvent):void
{
    trace("Ocurrio un error: " + e);
}
function descargado(e:Event):void
{
    trace("Archivo descargado: " + e);
}

function galeria(evento:MouseEvent)
{
   switch (evento.target) {
      case mas_btn :
         if (i<num_fotos-1) {
            i++;
            cargar(i);
            break;
         } else {
            break;
         }
      case menos_btn :
         if (i>0) {
            i--;
            cargar(i);
            break;
         } else {
            break;
         }
      case inicio_btn :
         i=0;
         cargar(i);
         break;
      case fin_btn :
         i=num_fotos-1;
         cargar(i);
         break;
   }
}

mas_btn.addEventListener(MouseEvent.CLICK,galeria);
menos_btn.addEventListener(MouseEvent.CLICK,galeria);
inicio_btn.addEventListener(MouseEvent.CLICK,galeria);
fin_btn.addEventListener(MouseEvent.CLICK,galeria);

cargar(i); 



Parece funcionar, pero no.... en el simulador de descarga de flash me hace los preloads correctamente, pero solo si dejo terminar la carga de la foto actual para pinchar en la siguiente.

En el caso de pasar a siguiente sin haber terminado la carga de la foto actual, me hace un extraño extrañisimo... solo me muestra media foto... y la otra mitad gris.....o me manda el preload al 150%... cosas muy raras...

Creia que al pinchar sobre una nueva solicitud el cargador se vaciaciaria y tomaria los nuevos datos desde el principio, sinembargo no es asi....

POR FAVOR QUE NADIE ME DIGA LO DE DESACTIVAR LOS BOTONES HASTA QUE CARGUE, YA QUE NO ES LO QUE QUIERO.

Alguien me puede ayudar????? Os lo agradeceria, llevo unas cuantas horas intentandolo solucionar...

Por superloyez

13 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Nov 2008 10:26 pm
Usa un Loader distinto para cada foto. La secuencia de pasaje de fotos sería:

- Quitar los listeners del loader anterior (si existiese)
- Quitar el Loader del displayList
- Crear un nuevo el Loader
- Agregarle los listeners
- Cargar la imagen

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Nov 2008 01:14 pm
Jorge, gracias por tu rapida respuesta... entiendo muy bien lo que me quieres decir... lo de remover los listener puede que sepa hacerlo... pero

escribió:


- Quitar el Loader del displayList
- Crear un nuevo el Loader


no tengo ni idea... ando mirando por ahi como poder hacerlo y no hay manera.

Todo lo que me dices iria en la funcion cargar, no???

escribió:


-Quitar los listeners del loader anterior (si existiese)


Como hago para saber si el loader existe????

Tengo problemas a la hora de definir las cosas... si estan dentro de una funcion, como que solo sirven para esa funcion... y si los defino fuera, no se como crear dos loader que me vaya alternando la carga.. podrias ser un poco mas especifico... y avanzar un poco mas tu respuesta...

Estaria infinatamente agradecido....

Un saludo.

Por superloyez

13 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 17 Nov 2008 01:23 pm
Para quitar agregar un elemento al displayList en la posición 1 haría

addChildAt(ldr, 1)

Para obtener la referencia al Loader que creaste en el nivel1 anteriormente

getChildAt(1)

Para quitarlo

removeChildAt(ldr, 1)

Si agrego un listener tal que

ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completo);

Lo quito así

ldr.contentLoaderInfo.removeEventListener(Event.COMPLETE, completo);

Creo que con esos elementos armas el rompecabezas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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