Comunidad de diseño web y desarrollo en internet online

Problema con preload AS3

Citar            
MensajeEscrito el 05 May 2009 07:37 pm
Hola como están todos??
Yo soy bastante nuevito en AS3 y me surgió este pequeño inconveniente, resulta q estoy desarrollando una pelicula Flash programada con clases y tengo una clase q hace el trabajo de loader. Esta clase la instancio en la principal para cargar las imagenes. hasta ahi todo bien, el loader lo hace perfecto pero mientras hace el loading de la/las imagenes me ejecuta el resto del código de la clase principal cosa q no deseo :twisted: . He probado iniciar la función de la clase pcipal en la clase preload en la funcion onComplete pero me da error. Como solucionan uds. esto???
Desde ya muchas gracias por su respuesta. :wink:
Si ya alguien tuvo este problemita y está en este foro avisenme ya q no me leí todos :cool: pero algunos me parecieron muy interesantes y estoy aprendiendo bastante.

Saludos!
Pablo.

Por Pablokorku

60 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 May 2009 10:16 am
¿Que error te da?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 May 2009 10:41 am

Pablokorku escribió:

He probado iniciar la función de la clase pcipal en la clase preload en la funcion onComplete pero me da error. Como solucionan uds. esto???

Posiblemente falte una "conversión de cast".
Pero ya que preguntas cómo lo solucionamos, personalmente prefiero hacer que en el onComplete del preloader"dispache" un evento personalizado para que se entere la película principal. (aunque de toda la literatura sobre preloaders que he visto por ahí pocos son los que toman dicha solución)
Vamos, algo como

Código ActionScript :

//Tu clase ImageLoader
public  class ImageLoader extends EventDispatcher {
    public static const IMGS_LOADED:String = "imgsLoaded";
    public static const LOAD_ERROR:String = "loadError";
    function ImageLoader(){...}
    //en algun momento
    dispatchEvent(new Event(ImageLoader.LOAD_ERROR));
    //en otro momento
    dispatchEvent(new Event(ImageLoader. IMGS_LOADED));
}

Desde una película tendríamos

Código ActionScript :

imgLoader=new ImageLoader();
imgLoader.addEventListener(ImageLoader.LOAD_ERROR,errorLoading);

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 May 2009 08:36 pm
Gracias por tu ayuda, no pensé q iban a contestar tan rápido, increible! :wink: pero la verdad esto me supera :shock: no se como ponerla en la clase q hace le preload pq es una extends movieClicp, pregunta se puede postear para q la vean o enviartela?

Gracias nuevamente!

Por Pablokorku

60 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 May 2009 06:41 am
Fijaté en la ayuda de Flash de dónde extiende un MovieClip

Herencia: MovieClip --> Sprite --> DisplayObjectContainer --> InteractiveObject --> DisplayObject --> EventDispatcher --> Object

Eso indica que un MovieClip tiene TODOS los métodos y propiedades de un EventDispatcher (y todos los de un DisplayObject, y todos los de un InteractiveObject y....)
Así que si tu clase es del tipo

Código ActionScript :

public class ImageLoader extends MovieClip{ ...}

puedes escribir tranquilamente

Código ActionScript :

dispatchEvent(new Event(ImageLoader. IMGS_LOADED));


Te indicaba que, en la función onComplete de tu clase escribas, p.e.

Código ActionScript :

dispatchEvent(new Event(Event.COMPLETE)); 

Ahora, en la principal digamos que has escrito

Código ActionScript :

var miloader:ImageLoader=new ImageLoader(); //<--he puesto como ejemplo que tu clase se llama ImageLoader
miloader.addEventListener(Event.COMPLETE,onComplete)
function onComplete(e:Event){
    trace("se completó el loader")
}

Observa que es un modo "natural" de funcionar. En Flash, nos encontramos con algunas clases que "dispatchan" eventos. (por ejemplo, la Clase MovieClip dispacha ENTER_FRAME), y nosostros controlamos que esos eventos mediante addEventListener.

NOTA: He usado la misma constante "Event.COMPLETE" por no crearme otra constante y porque me parece bastante claro. Igual podría haber escrito

Código ActionScript :

//en la función onComplete del Loader
dispatchEvent(new Event("ACABO")); 

Y en en la principal

Código ActionScript :

var miloader:ImageLoader=new ImageLoader(); 
miloader.addEventListener("ACABO",onComplete)
function onComplete(e:Event){
    trace("se completó el loader")
}

Por Eliseo2

710 de clabLevel



 

firefox

 

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