Comunidad de diseño web y desarrollo en internet online

porqué dentro de la función no, fuera si?

Citar            
MensajeEscrito el 28 Ago 2008 11:21 pm
Hola:

Estoy metiendo un precargador de películas externas dentro de una función. El problema es que dentro de la función no funciona !!!

Aquí el código:

Código :

function cargaPeliculas(peliculaParaCargar){
   var precarga:MovieClipLoader = new MovieClipLoader();
   precarga.addListener(this);
   function onLoadStart(clip:MovieClip) {
      clip._visible = false;
      clip.stop();
      this.attachMovie("preloader", "preload", this.getNextHighestDepth(), {_x:escenarioMitadLargo, _y:(escenarioMitadAlto-altoBotones)});
   }
   function onLoadProgress(clip:MovieClip) {
   }
   function onLoadInit(clip:MovieClip) {
      removeMovieClip(preload);
      clip._visible = true;
      clip.play();
      trace("cargado");
   }
   precarga.loadClip(peliculaParaCargar, contenidosMain);
}
cargaPeliculas("0102bienvenida.swf");


Lo pongo dentro de la función para poder llamar al precargador cada que cargo una película externa.
Lo curioso es que si carga las películas. Además, el trace NO ARROJA NADA.

Gracias de antemano.

Por yconoclasta

12 de clabLevel



Genero:Masculino  

diseñador aventurero soñador

firefox
Citar            
MensajeEscrito el 29 Ago 2008 09:07 am
Debes crear un objeto listener para capturar los eventos y es mejor que envíes como parámetro el movieClip contenedor, algo como esto:

Código ActionScript :

function cargaPeliculas(peliculaParaCargar:String, contenedor:MovieClip):Void {
   
   var listener:Object = new Object();
   
   var precarga:MovieClipLoader = new MovieClipLoader();
   
   precarga.addListener(listener);
   
   var preload:MovieClip;
   
   listener.onLoadStart = function(clip:MovieClip):Void {
      
      clip._visible = false;
      clip.stop();
      
      preload = _root.attachMovie("preloader","preload",_root.getNextHighestDepth(),{_x:escenarioMitadLargo, _y:(escenarioMitadAlto-altoBotones)});
   }
   
   listener.onLoadProgress = function(clip:MovieClip):Void {
      
      
      
   }
   
   listener.onLoadInit = function(clip:MovieClip):Void {
      
      removeMovieClip(preload);
      clip._visible = true;
      clip.play();
      
      trace("cargado");
   }

   precarga.loadClip(peliculaParaCargar, contenedor);

}


cargaPeliculas("0102bienvenida.swf", contenidosMain);

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 29 Ago 2008 03:01 pm
Fabuloso elchininet. Gracias.

Sólo me restaría una pregunta. ¿Cómo funciona eso del listener? Vaya, no soy muy diestro en el uso de AS. He leído al respecto pero no lo alcanzo a comprender.

Por cierto, descubrí que el código funciona también de esta manera:

Código :

var precarga:MovieClipLoader = new MovieClipLoader();
precarga.addListener(this);
function onLoadStart(clip:MovieClip) {
   clip._visible = false;
   clip.stop();
   this.attachMovie("preloader", "preload", this.getNextHighestDepth(), {_x:escenarioMitadLargo, _y:(escenarioMitadAlto-altoBotones)});
}
function onLoadProgress(clip:MovieClip) {
}
function onLoadInit(clip:MovieClip) {
   removeMovieClip(preload);
   clip._visible = true;
   clip.play();
   trace("cargado");
}
function cargaPeliculas(peliculaParaCargar){
   precarga.loadClip(peliculaParaCargar, contenidosMain);
}
cargaPeliculas("0102bienvenida.swf");


Aunque la modificación con listener creo es lo más adecuado, ¿no?

Saludos.

Por yconoclasta

12 de clabLevel



Genero:Masculino  

diseñador aventurero soñador

firefox
Citar            
MensajeEscrito el 29 Ago 2008 04:54 pm
Si lo haces de la manera que lo has posteado tomará como listener el escenario, lo que no me gusta mucho y traería problemas al tratar de hacer las variables locales como hiciste al principio, lo mejor es utilizar un objeto de listener.

Ahora, sobre tu pregunta, en AS2 hay muchas clases que sus eventos los lanzan a través de objetos listeners, estos objetos captan el evento que se ha realizado y llaman a la función respectiva, por ejemplo para determinar cuando se ha presionado una tecla se puede hacer un objeto listener que lo capte, por ejemplo:

Código ActionScript :

var listener:Object = new Object();

listener.onKeyDown = function():Void{

   trace("se ha presionado una tecla");

}

Key.addListener(listener);

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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