Comunidad de diseño web y desarrollo en internet online

Gestionar precarga (as3) desde un archivo .as externo

Citar            
MensajeEscrito el 17 Sep 2010 09:09 am
Hola, podrían darme un ejemplo para gestionar una precarga desde un archivo .as externo? "El error que me dá es: Número de argumentos incorrecto. Se esperaba 4." Supongo que es por lo siguiente:
Estoy pasando 4 parámetros

Código ActionScript :

function carga_contenidos ( contenidos:Array, url:String, callback:Function, pre_loader: Function):void {...


pero el "pre_loader:Function" de mi función "mi_cargador_progress" le falta algo dentro del paréntisis

Código ActionScript :

pre_loader.call (???????.....)

y por útlimo, qué tengo que poner en mi función del archivo .swf? Quisiera hacer una simple barrita...

Código ActionScript :

var preLoader:Function = function (????????????.... ) {...



Mi código es el siguiente:

Código ActionScript :

//este es el código utilizado en mi archivo .as externo:
/////////////////////////////////////////////////////
function carga_contenidos ( contenidos:Array, url:String, callback:Function, pre_loader: Function):void {
   var mi_cargador:Loader = new Loader ();
   var mi_request:URLRequest = new URLRequest ( url + "/" + contenidos [ contenido_a_cargar ] );
   
   mi_cargador.load( mi_request );
   
   mi_cargador.contentLoaderInfo.addEventListener( Event.COMPLETE, mi_cargador_complete );
   mi_cargador.contentLoaderInfo.addEventListener ( ProgressEvent.PROGRESS, mi_cargador_progress )

   function mi_cargador_complete( e:Event ) {
      
      trace ( "Contenido " + contenido_a_cargar + " cargado")
      
      callback.call ( this, e.target.content )
      
      contenido_a_cargar ++
      
      if ( contenido_a_cargar < contenidos.length ) {
         // Recursividad
         carga_contenidos ( contenidos, url, callback)
      } else {
         contenido_a_cargar = 0
         trace ( "mis_funciones.as dice: todas los contenidos cargados")
      }
   }
   function mi_cargador_progress( e:ProgressEvent ) {
      var porcentaje:Number = Math.floor (e.target.bytesLoaded/e.target.bytesTotal*100)
      pre_loader.call ()
      trace (porcentaje)
   }
}



Código ActionScript :

//este es el código utilizado en mi archivo .swf:
/////////////////////////////////////////////////////
carga_contenidos ( nombres_imagenes_pastillas_arr, "pastillas_proyectos", callBack, preLoader )

var callBack:Function = function ( contenido:Bitmap ) { 
   imagenes_pastillas_arr.push ( contenido )
         
   if (imagenes_pastillas_arr.length == numero_proyectos ) {
   contruye_menu ()
   }
} 

var preLoader:Function = function ( ) { 
   trace ("está entrando en el preloader")
} 

Por cecilia_

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Sep 2010 10:13 pm
Alguien que me ayude...? porfa...

Por cecilia_

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 18 Sep 2010 12:35 am
hola cecilia!
como va ?

según el error que te retorna y viendo rápidamente tu código... el problema está al efectuar la recursión.

Tu método "carga_contenidos" en su firma tiene 4 parámetros, a saber:

Código ActionScript :

function carga_contenidos ( contenidos:Array, url:String, callback:Function, pre_loader: Function):void


pero si ves, cuando lo llamas en la recursión, solo le pasas 3 parámetros.

Código ActionScript :

// Recursividad 
         carga_contenidos ( contenidos, url, callback) 



si quieres, en caso de ser necesario, obviar el 4to parámetro.. agrega un "=null" a este último parámetro.
Quedaría así:

Código ActionScript :

function carga_contenidos ( contenidos:Array, url:String, callback:Function, pre_loader: Function = null):void

esto seguramente soluciona el error que da en tiempo de compilación, pero de todas formas te estaría faltando ordenar algo más el código para que su funcionalidad sea correcta. Antes de eso te pregunto ...

estás trabajando con clases ? tienes el código escrito en la "linea de tiempo" ?

Saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 18 Sep 2010 01:08 am
Muchas gracias!! ya no me da ese error!
Aún no sé trabajar con clases, lo que tengo es:

1) un archivo .as externo donde tengo una "función genérica" de carga de imágenes, otra de xml y otra función conversora de xmllist a array.
2) un swf donde tengo el resto de código y de donde voy tirando de la librería.

Solucionado este problema me surge otro, en la función pre_loader:

var pre_loader:Function = function ( ) {
var porcentaje:Number = Math.floor (e.target.bytesLoaded/e.target.bytesTotal*100)
porcentaje_textfld.text = String (porcentaje + "%")
}

Como la función pre_loader está en mi archivo .swf y no en el .as, me da el siguiente error: "Acceso a una propiedad e.target.bytesLoaded no definida..." y lo mismo con el bytesTotal.
Supongo que no reconoce a quien emite el evento...

Cómo crees que debo hacerlo? pasando un parámetro??

Muchas gracias por tu ayuda! Saludos!!

Por cecilia_

11 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Sep 2010 12:37 am
Hola cecilia,

tanto "bytesLoaded" como "bytesTotal" son propiedades de la clase "ProgressEvent".
Por eso estaría bien aplicado el uso de esta linea:

Código ActionScript :

var porcentaje:Number = Math.floor (e.target.bytesLoaded/e.target.bytesTotal*100) 

en el contexto (dentro de la función) "mi_cargador_progress", pero NO dentro de la función "preLoader" (como lo tienes ahora) porque el objeto "e" del tipo "ProgressEvent" no existe en "preLoader" (por eso el error):

Realmente no he probado tu código pero lo lógico sería que funcionara si le pasas "e" como parámetro a "preLoader". entonces "e" ya existiría en contexto de "preLoader" y no te debería dar ningún error.

De todas formas repito que no he probado tu código, y no estoy seguro de todo pueda funcionar como debe.
Sería bueno que cuando puedas te dieras tiempito para migrarte a POO, esto te resolvería a la corta algunos dolores de cabeza.

Espero te sirva!
saludos

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 19 Sep 2010 04:02 pm
Hola, funciona!!! muchas gracias, ya había probado lo que me dices pero pasándole "e.target" y no funcionaba... te agradezco muchísmo por tu ayuda! Ahora puedo trabajar en la función "pre_loader" en mi archivo .fla independientemente de mi archivo .as

Y ya que estamos, que es POO??

Otra vez gracias!

Por cecilia_

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Sep 2010 08:58 pm
Hola cecilia!

me alegro que te haya funcionado!

Bueno, respondiendo tu pregunta... POO es la sigla de "Programación Orientada a Objetos".

Para una guía rápida e introducción muy buena de sus conceptos, puedes ver la primera parte de este tutorial escrito por Freddie.
Para profundizar un poco más, mira este curso de POO escrito por Fricky.

Si bien el tutorial y el curso tratan sobre el uso de POO sobre Actionscript 2, los conceptos son los mismos para AS3 ya que son inherentes al lenguaje sobre el que trabajes (por otra parte la sintaxis casi no ha cambiado para AS3, por lo que ambos te serán de mucha ayuda).

Luego, si tu intención es trabajar con POO en AS3 (lo cual te recomiendo) será bueno que tu misma empieces a escribir código AS3. No hay otra forma de aprender que practicando :D

Para terminar te dejo algunos enlaces (as3) relacionados con de este post.

- Precargas externas de archivos con actionscript 3
- Crear una precarga en actionscript 3 con porcentaje
- Preloader en Actionscript 3

Saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome
Citar            
MensajeEscrito el 20 Sep 2010 11:22 pm
Voy a ponerme con ello! y muchas gracias por todo, me ha sido de gran ayuda!

Saludos!!

Por cecilia_

11 de clabLevel



 

chrome

 

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