Comunidad de diseño web y desarrollo en internet online

cual es la logica detras de loader + movie clip + dis. obj.?

Citar            
MensajeEscrito el 30 Abr 2009 12:52 am
bueno la pregunta es esa, cual es la logica para usar el display object, loader y la clase movie clip, juntas para hacer por ejemplo un sitio que cargue swf's en un archivo principal al estilo de lo que haciamos antes?

un amigo que le sabe al a..s 3 me explicaba que no hay porque usar movie clips anidadas sino que todo funciona como un "diccionario" no se a que se refiera pero la cuestion es la siguiente:

necesito pues, ejemplos o un ejemplo que exponga la logica de como al cargar un swf, sea posible accesar a las movie clips que contenga, pero por lo general con loader.content me regresa siempre null.

me refiero a un codigo como este:

Código :

var contenedor:MovieClip = new MovieClip();
// creo el loader
var loader:Loader = new Loader();
loader.load(new URLRequest("01.swf"));

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);

function insertMovie(evt:Event):void{

addChild(contenedor).name = "contenedor";
contenedor.addChild(loader).name = "peli";

contenedor.x = 10;
contenedor.y = 10;


ese ejemplo es de aqui: http://foros.cristalab.com/como-controlar-una-movie-cargada-con-loader-t66148/

entonces la pregunta es, como se haria esto mismo pero con varios swf's para cargarlos en el archivo principal???

o... quisa esa forma de trabajo de antaño de flash ya no es la apropiada hoy en dia?

cual es la logica para combinar estas clases y hacer este tipo de tareas?

o cual es la ultima tendencia en el manejo de cargar varias secciones en un archivo principal? es esto muy old school?

Por dyei

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2009 08:46 am
La "lógica" del Objeto Loader es medio complicada (aunque no tanto).
Pero antes quiero aclarar algo:

En AS.3 TODO lo controlamos con variables que hacen referencia a Objetos. Casi nos tenemos que olvidar de nuestros queridos "nombres de instancia" (En realidad cuando tenemos en la película principal un Mc con un "nombre de instancia", Flash lo traduce como una variable de tipo MovieClip que "hace referencia" a ese MC.)

Como siempre, las variables pueden pertenecer a la película principal -si las declaramos fuera de cualquier función- y, por tanto accesibles dentro de cualquier función, o ser temporales y sólo usarse dentro de una función.

ejemplo tonto:

Código ActionScript :

var mc:MovieClip; //<--Declaramos una variable de tipo MC aquí

crearMc()
crearOtroMC();

mostrarObjetos();

function crearMc(){
    mc= new MovieClip(); //<--usamos la variable declarada antes
    addChild(mc)
}
function crearOtroMC(){
        var otro_mc:MovieClip = new MovieClip();  //<--creamos la variable aquí
        addChild(otro_mc)
}
function mostrarObjetos(){
   trace(mc) //--->nos saldrá algo
   trace(otro_mc) //--->saldrá "null"
}


"mc" será accesible desde cualquier función, "otro_mc" NO

Vale, aclarado (un poco esto) vamos con un Objeto de la Clase Loader
1.-En principio un Objeto Loader es un objeto que deriva la Clase Loader que extiende de DisplayObject, con lo cual se puede añadir a la displayList (a la película o a un MC) con un addChild tanto antes como después de que se haya cargado la película. Incluso antes de hacer el load. En ese sentido es como cualquier MovieClip.
Y sí, hasta que no se hace un addChild NO lo veremos en pantallas

Si en la "old school" teníamos un MC "contenedor" donde cargábamos las distintas películas. En AS.3 podemos tener un único objeto Loader donde cargamos las distintas películas.

2.-Cuando hacemos un

Código ActionScript :

var loader:Loader = new Loader();
loader.load(new URLRequest("01.swf"));

Después de que se haya cargado podemos acceder al contenido a través de

Código ActionScript :

loader.content

SIEMPRE que "loader" pertenezca a la película principal y SIEMPRE que se haya cargado.

3.-El modo de controlar la carga de una película que cargamos con un Loader es a través de su "propiedad" contentLoaderInfo.
Por eso al añadir el Listener lo añadimos a

Código ActionScript :

loader.contentLoaderInfo.addEventListener(...,mifuncion)

La función "mifuncion" recibe como parámetro un "loaderInfo", por eso tenemos

Código ActionScript :

mifuncion(e:Event){
    var info=e.target as LoaderInfo
    trace(info);
    trace(info.loader)
    trace(info.loader.content)
}

4.-info.loader NO es accesible hasta que se haya cargado completamente la película, esto es, en un Event.COMPLETE, o en un Event.INIT
5.-Desde una película cargada en un objeto Loader que esté en la película principal "parent" es el propio objeto loader, en tanto que "parent.parent" es la propia película principa
6.-como siempre, en AS.3 estamos a cuestas con la "conversión de cast"

NOTA:Se suele escribir

Código ActionScript :

contenedor.name="contenedor"
addChild(contenedor);
//en lugar de
//addChild(contenedor).name = "contenedor";

Darle propiedad "name" a un displayObject no sirve para demasiado, salvo para poder acceder a él a través de getChildByName -si tenemos una variable que hace referencia a dicho DisplayObject no nos hace falta para nada- y, quizá, para, de algún modo, relacionarlo con otra cosa.
Vamos, el motivo de que algo como

Código ActionScript :

contenedor.name="contenedor"
addChild(contenedor);
contenedor.x=100 //<--esto funciona porque tenemos una variable "contenedor",
//podríamos haber escrito
contenedor.name="porompompero"
addChild(contenedor);
contenedor.x=100

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Abr 2009 05:13 pm
gracias estubo muy explicativas tus aclaraciones, :D en lo personal siento que adobe debio incluir snipplets o hacer mas ejemplos sobre todo esto, porque aunque el lenguaje cambia y se implementa algo mas complejo las necesidades basicas de los web designers siguen siendo las mismas.


no vi ejemplos que hablen mucho de esto que yo creo que es de las tareas de cajon en en flash. alguien conoce algunos links?


y muchisimas gracias por tu explicacion :D

Por dyei

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 May 2009 08:22 pm
Mas importante que encontrar la respuesta correcta es, plantear la preguntas correctas.

Un loader se puede resolver de muchas formas y la forma correcta dependerá de nuestras necesidades y habilidades.
Una propuesta interesante sería que ante un problema que no podemos comprender, plantearnos la pregunta de otra forma. En este caso yo trate de resolverlo haciendo un pequeño depurador.

Código :

var loader = addChild(new Loader())
loader.load(new URLRequest("external.swf"))

function debug(event)
{
   trace(event.type, event.currentTarget, loader.loaderInfo.content)
}

loader.addEventListener(Event.ENTER_FRAME, debug)
loader.loaderInfo.addEventListener(Event.INIT, debug)
loader.loaderInfo.addEventListener(Event.COMPLETE, debug)


Saludos!

Por danieloso

2 de clabLevel



 

firefox

 

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