El proyecto CoreLib consiste en una biblioteca en Actionscript 3 que contiene un buen número de clases y utilidades para trabajar con Actionscript. Incluye, entre otras cosas, clases para codificación MD5 y SHA1, serialización JSON y tratamiento avanzado de cadenas de texto y fechas. El proyecto ha sido creado por gente como Mike Chambers, Daniel Durà o Darron Schall, verdaderos maestros en la programación en actionscript.

Acceder a las etiquetas ID3 con Flash
Los archivos de sonido MP3 pueden contener etiquetas ID3 que proporcionan metadatos sobre el archivo. Si un sonido MP3 que se carga utilizando Sound.attachSound() o Sound.loadSound() contiene etiquetas ID3, se puede consultar estas propiedades.
En el siguiente ejemplo, usamos el handler onID3() asociado a la clase Sound para determinar cuando la información de la cabecera ID3 ha sido cargada y mostrarla dentro de una caja de texto que creamos a tal efecto.
var Cancion:Sound = new Sound();
Cancion.onID3 = function():Void {
for (var i:String in this.id3){
DatosMp3.htmlText += "" + i + ":" + this.id3[i] + "\n";
}
};
this.createTextField("DatosMp3", 1, 10, 10, 500, 300);
DatosMp3.border = true;
DatosMp3.html = true;
DatosMp3.multiline = true;
DatosMp3.wordWrap = true;
Cancion.loadSound("song.mp3", true);
En un principio se podía accdeer a las propiedades ID3 1.0, con los siguientes métodos:
Sound.id3.comment
Sound.id3.album
Sound.id3.genre
Sound.id3.songname
Sound.id3.artist
Sound.id3.track
Sound.id3.year
Lo cierto es que con estas propiedades nos puede servir en el 99% de los casos pero a partir de las versión 7 del Player, éste admitía etiquetas ID3 2.0. La equivalencia con las etiquetas anteriores sería:
Sound.id3.COMM
Sound.id3.TALB (album)
Sound.id3.TCON (genre)
Sound.id3.TIT2 (songname)
Sound.id3.TPE1 (artist)
Sound.id3.TRCK (track number)
Sound.id3.TYER (year
Pero además, con las etiquetas IDe 2.0 se puede acceder a la siguiente información:
Sound.id3.TFLT: Tipo de archivo
Sound.id3.TIME: Tiempo
Sound.id3.TIT1: Descripción de grupo de contenido
Sound.id3.TIT2: Título/nombre de canción/descripción del contenido
Sound.id3.TIT3: Subtítulo/descripción adicional
Sound.id3.TKEY: Clave inicial
Sound.id3.TLAN: Idiomas
Sound.id3.TLEN: Longitud
Sound.id3.TMED:Tipo de medio
Sound.id3.TOAL: Álbum/película/título de espectáculo original
Sound.id3.TOFN: Nombre de archivo original
Sound.id3.TOLY: Letrista/escritor original
Sound.id3.TOPE: Artistas/intérpretes originales
Sound.id3.TORY: Año de publicación original
Sound.id3.TOWN: Propietario/licenciatario del archivo
Sound.id3.TPE1: Intérpretes/solistas principales
Sound.id3.TPE2: Grupo/orquesta/acompañamiento
Sound.id3.TPE3: Director/intérprete adicional
Sound.id3.TPE4: Interpretado, remezclado o editado por
Sound.id3.TPOS: Parte de un conjunto
Sound.id3.TPUB: Editor
Sound.id3.TRCK: Número de pista/posición en el conjunto
Sound.id3.TRDA: Fechas de grabación
Sound.id3.TRSN: Nombre de emisora de Internet
Sound.id3.TRSO: Propietario de emisora de Internet
Sound.id3.TSIZ: Tamaño
Sound.id3.TSRC: ISRC (código de grabación estándar internacional)
Sound.id3.TSSE: Software/hardware y configuración empleados para la codificación
Sound.id3.TYER: Año
Sound.id3.WXXX: Fotograma de vínculo de URL
El siguiente ejemplo muestra estos datos dentro de un Datagrid:
1.– Desde el panel de componentes arrastramos una instancia de Datagrid y le asignamos como nombre de instancia “id3_dg”
2.– En un fotograma pegamos el siguiente código:
import mx.controls.gridclasses.DataGridColumn;
id3_dg.move(0, 0);
id3_dg.setSize(200, 200);
var DataGrid_Propiedad:DataGridColumn = id3_dg.addColumn(new DataGridColumn("property"));
DataGrid_Propiedad.width = 100;
DataGrid_Propiedad.headerText = "Propiedad";
var DataGrid_Valor:DataGridColumn = id3_dg.addColumn(new DataGridColumn("value"));
DataGrid_Valor.width = id3_dg._width-DataGrid_Propiedad.width;
DataGrid_Valor.headerText = "Valor ID3";
var cancion:Sound = new Sound();
cancion.onID3 = function() {
for (var prop in this.id3) {
id3_dg.addItem({property:prop, value:this.id3[prop]});
}
};
cancion.loadSound("song.mp3", true);
As3: El evento mouseLeave y el m茅todo addEventListener
Con el nuevo evento Stage.mouseLeave, perteneciente a la clase Stage, podemos averiguar cuando el puntero del ratón se mueve fuera de la película de Flash. Lo que nos puede resultar muy útil a la hora de programar nuestras aplicaciones.
En este ejemplo controlamos las veces que el cursor se desplaza fuera de la película de flash:
var textTest:TextField;
var Contador:int=0;
stage.addEventListener(Event.MOUSE_LEAVE, onStageLeave);
textTest = new TextField();
addChild(textTest);
textTest.text = "FUERA:";
function onStageLeave(event:Event):void{
textTest.text = "FUERA:\n"+ ++Contador + " veces.";
}
Por otro lado, un método también muy interesante a la hora de mantener la interacción con el usuario es addEventListener, con el que podemos recibir notificaciones a la ejecución de eventos. Por ejemplo, recibir la tecla que ha sido pulsada:
var textTest:TextField;
stage.addEventListener(KeyboardEvent.KEY_DOWN, TeclaPulsada);
textTest = new TextField();
addChild(textTest);
textTest.text = "HAS PULSADO:";
function TeclaPulsada(tecla:KeyboardEvent):void{
textTest.text = "HAS PULSADO:\n"+tecla.keyCode;
}
Clase Uri
E-mail:pollyjex@emc2zen.com.ar
URL:www.emc2zen.com.ar
Ver ejemplo en funcionamiento
Archivos fuente del ejemplo » »
Archivos Fuente de la clase » »
Documentación de la clase » »
Estructura de la clase:
Esta clase permite administrar el armado de una URI, para ser enviada por el método GET, o bien en la escritura de la misma para se almacenada.
Además posee ciertas utilidades para la verificación de factores que determinen el tipo de URI que es.
NOTAS:
- La clase es muy sencilla, pero como siempre dejo algunos detalles que se pueden mejorar y así hacer un poco más entretenida la tarea de implementar o mejorar la clase
- Aquellos que este usando la Clase FileLoad, SoundDataLayer, les recomiendo bajar las fuentes de este tutorial y actualizar las clase ? ya que la Utils sufrió algunas mejoras.
Estructura de la clase:
AsLib
Uri extends Utils
Detalles de las clases:
Uri: Utilidad para el manejo de las URI.
Métodos:
new Uri(), addParameters(), getDns(), getFileName(), getParameters(), getParametersUri(), getUri(), isFile(), isHttp(), isHttps(), removeAllParameters(), removeParameters()
Uso de la clase:
La forma de utilizar la clase es muy sencilla:
// Métodos básicos: trace( Uri.isHttp() ); trace( Uri.isHttp( "https://www.misitio.com" ) ); trace( Uri.isHttps() ); trace( Uri.isHttps( "https://www.misitio.com" ) ); trace( Uri.isFile() ); trace( Uri.isFile( "https://www.misitio.com" ) ); trace( Uri.getFileName() ); trace( Uri.getFileName( "http://www.misitio.com/log.txt" ) ); trace( Uri.getDns() ); trace( Uri.getDns( "http://www.misitio.com/log.txt" ) ); trace( Uri.getUri() );
Uso del administrador de parámetros:
// Creamos una instacia de la clase
var $uri:Uri = new Uri();
// agregamos parámetros
$uri.addParameters( {
user:"toshi",
pass:1234,
id:7,
lánzame:"toshiba",
idAction:777
} )
// traceamos la URI formateada
trace( $uri.getParametersUri() );
// visualizamos todos lo parámetros
var param:Object = $uri.getParameters();
for( var a:String in param ){
trace( "Key: " + a );
trace( "\t\tValue: " + param[a] );
}
// removemos parametros
$uri.removeParameters( [
"idAction",
"lastname"
] );
// traceamos la URI formateada
trace( $uri.getParametersUri() );
// eliminamos todos lo parámetros
$uri.removeAllParameters();
// traceamos la URI formateada
trace( $uri.getParametersUri() );
SIN MAS
Espero que les sea de utilidad, y que puedan experimentar en su estructura para modificarla a sus necesidades.
Críticas/mejoras/dudas/problemas, escribir a: pollyjex@emc2zen.com.ar.
Aquellos que quiera colaborar, aportando ideas o bien estructuras de código, escribir a: mfw@emc2zen.com.ar
Saludos.
PollyJex ^_^!
Clase SoundDataLayer
E-mail: pollyjex@emc2zen.com.ar
URL:
Ver ejemplo en funcionamiento » »
Archivos fuente del ejemplo » »
Archivos Fuente de la clase » »
Documentación de la clase » »
Estructura de la clase:
Esta clase permite separar la Capa de Datos y de Programación (API) de un reproductor de MP3, con respecto a la Interfaz Grafica (GUI).
Lo bueno de esto es que permite una versatilidad en el diseño de la GUI, sin tener que preocuparse por la API.
La clase es muy sencilla, pero como siempre dejo algunos detalles que se pueden mejorar y así hacer un poco más entretenida la tarea de implementar o mejorar la clase.
De apoco iré armando un miniFrameWork (mFW), para que aquellas ávidas mentes que quieran incursionar en la programación de flash, no tengan que romperse la cabeza con mounstrosos FrameWork que jamás se llegan a comprender o a utilizar del todo.
Sigo sosteniendo que este mFW esta orientado a personas que no poseen grandes capacidades de programación o bien están inicializando sus pasos en ella, dentro de lo que es ActionScript 2. Una vez finalizado en AS2 migraremos a AS3, reescribiendo el mFW en dicha versión del lenguaje.
Por ultimo, el lema que pretendo implementar en la elaboración de mFW es: A grandes problemas, soluciones simples.
NOTA: Aquellos que este usando la Clase FileLoad, les recomiendo bajar las fuentes de este tutorial y actualizar la clase ya que la modifiqué para adaptarla al mFW, jejeje!
Otra cosa, por el momento seguiré armando los ejemplos (example) de las clases en AS1, pero tengo la intención de que el armado de las estructuras lógicas de las GUI, sean también hecho en clases.
Estructura de la clase:
AsLib
SoundPlayer
SoundDataLayer
Detalles de las clases:
SoundDataLayer: Administra las funcionalidades en la reproducción de archivos de audio, en este caso MP3.
Propiedades:
coefficientVolume, initialVolume, repeat, streaming
Métodos:
new SoundDataLayer(), GetDataTrack(), GetStatus(), load(), MaxVolume(), MinVolume(), MuteVolume(), NextTrack(), PauseTrack(), PlayTrack(), PrevTrack(), StopTrack(), Volume()
Eventos:
OnChanged(), OnLoad(), OnProgress()
Uso de la clase:
La forma de utilizar la clase es muy sencilla:
// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();
// Definimos que hacer con el cambio de track
player.OnChanged = function():Void {
var _data:Object = this.GetDataTrack();
for( var a:String in _data ){
trace( a + ": " + _data[a] );
}
}
// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );
Utilizando algunos métodos y propiedades:
// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();
// Definimos que hacer con el cambio de track
player.OnChanged = function():Void {
var _data:Object = this.GetDataTrack();
for( var a:String in _data ){
trace( a + ": " + _data[a] );
}
}
// coeficiente de volumen
player.coefficientVolume = 2;
// inicio del volumen
player.initialVolume = 70;
// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );
///////////////////////////////////////////////////////////////
// Siguiente Track
player.NextTrack();
// Track Anterior
player.NextTrack();
// Play Track
player.PLayTrack();
// Stop Track
player.StopTrack();
// más volument
player.maxVolume();
// menos volument
player.minVolume();
// etc...
La clase posee dos modos de reproducción por:
STREAMING (default):
// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();
// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );
NO STREAMING:
// Creamos una instancia a la clase
// una de las opciones es setearlo en el constructor
// new SoundDataLayer( false );
var player:SoundDataLayer = new SoundDataLayer();
// o bien como propiedad
player.streming = false;
// medimos el progreso de la carga
player.OnProgress = function( _value:Number ):Void {
trace( "CARGA: " + _value + " %..." )
}
// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );
La clase posee tres eventos:
OnLoad: este se ejecuta una vez finalizada la carga total del archivo.
// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();
// Definimos el evento
player.OnLoad = function():Void {}
OnChanged: este se ejecuta una vez finalizada la reproducción y cambio del track, o bien cuando el cambio es manual.
// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();
// Definimos el evento
player.OnChanged = function():Void {}
OnProgress: este se ejecuta mientras se efectúa la carga, y retorna el progreso de la misma. El valor devuelto es el porcentaje de carga que posee en ese momento el archivo.>
// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();
// Definimos el evento
player.OnProgress = function( _value:Number ):Void {
trace( "CARGA: " + _value + " %..." )
}
NOTA: Si el constructor es creado e inicializado dentro del ámbito de una función, lo que deben utilizar es el método delegate de la clase Utils. Ya que la clase no maneja el dentro de ella el ámbito donde se ejecuta la dicha instancia.
EJ1:
import AsLib.Utils;
var PLAYER:SoundDataLayer;
var ViewTitle:Function = function ():Void {
trace("ON_CHANGED!!!");
}
var init:Function = function ( _playlist:String, _folder:String ):Void {
PLAYER = new SoundDataLayer();
PLAYER.load( _playlist, _folder );
PLAYER.OnChanged = Utils.delegate( this, ViewTitle );
}
EJ2:
var PLAYER:SoundDataLayer = new SoundDataLayer();
PLAYER.load( _playlist, _folder );
PLAYER.OnChanged = function():Void {
trace("ON_CHANGED!!!");
}
SIN MAS?
Espero que les sea de utilidad, y que puedan experimentar en su estructura para modificarla a sus necesidades.
Criticas/mejoras/dudas/problemas, escribir a: pollyjex@emc2zen.com.ar.
Aquellos que quiera colaborar, aportando ideas o bien estructuras de código, escribir a: mfw@emc2zen.com.ar
Saludos.
PollyJex ^_^!
Aplicar ruido a una imagen con Flash
Para ello utilizaremos el método noise de la clase BitmapData, que rellena una imagen con píxeles que representan ruido aleatorio. La sintaxis es:
public noise(randomSeed:Number, [low:Number], [high:Number], [channelOptions:Number], [grayScale:Boolean]) : Void
Donde:
- randomSeed es el valor de inicialización aleatorio que se va a utilizar.
- low es el valor más bajo que se va a generar para cada canal (de 0 a 255). El valor predeterminado es 0.
- high es el valor más alto que se va a generar para cada canal (de 0 a 255). El valor predeterminado es 255.
- channelOptions es un número que puede ser una combinación de cualquiera de los cuatro valores de canal: 1 (rojo), 2 (verde), 4 (azul) y 8(alfa). Puede utilizar el operador lógico OR | para combinar valores de canal. El valor predeterminado es (1 | 2 | 4).
- grayScale es un valor booleano. Si es true, se creará una imagen en escala de grises estableciendo todos los canales de color con el mismo valor. La selección del canal alfa no se ve afectada por el establecimiento de este parámetro como true. El valor predeterminado es false.
//importamos la clase BitmapData
import flash.display.BitmapData;
//Creamos un clip de pelicula
//que contendra la imagen
this.createEmptyMovieClip("contenedor_mc", this.getNextHighestDepth());
//cargamos la imagen
contenedor_mc.loadMovie("img01.jpg");
//creamos una instancia 'ruido'
//a partir de la clase BitmapData
var ruido:BitmapData = new BitmapData(Stage.width, Stage.height, true);
//asociamos el mapa de bits al clip
this.attachBitmap(ruido, this.getNextHighestDepth());
//creamos un intervalo de refresco
setInterval(actRuido, 100);
function actRuido() {
//asociamos valores a partir de la posicion del raton
var valor1 = 30 * _xmouse / Stage.width;
var valor2 = 200 * _ymouse / Stage.height;
//aplicamos el ruido
ruido.noise(Math.round(Math.random() * 100000), valor1, valor2, 8, true);
}
Estilos predefinidos para los componentes de Flash
A cada uno de los componentes Flash denominados de "User Interface", tales como CheckBox, ComboBox, DataGrid, ... se les puede cambiar la apariencia utilizando el método setStyle(). Con el que indicamos el estilo que deseamos aplicar. La sintaxis es:
NombredeInstancia.setStyle(NombredeEstilo, ValordeEstilo)
Uno de los estilos que ya esta definido y que modemos aplicar es themeColor: el cuál puede tomar tres valores (haloGreen, haloBlue y haloOrange). Por ejemplo, si queremos cambiar el aspecto de un ComboBox, cuya instancia hemos denominado miCombo, lo haríamos:
miCombo.setStyle("themeColor", "haloOrange");
El componente DateField. Primera Parte
El componente DateField es usado para que el usuario seleccione una fecha. El componente DateField es un campo de texto no seleccionable que muestra la fecha con un icono de calendario situado a su derecha. Si no se ha seleccionado ninguna fecha, el campo de texto estará vacío y se mostrará el mes correspondiente al día de hoy en el selector de fechas. Cuando el usuario hace clic dentro del recuadro de delimitación del campo de fecha, aparece el selector de fechas con el mes correspondiente a la fecha seleccionada. Cuando el selector de fechas está abierto, el usuario puede usar los botones de desplazamiento para cambiar de mes y año y seleccionar una fecha. Cuando se selecciona una fecha, el selector de fechas se cierra y la selección se introduce en el campo de fecha. Para utilizarlo deberemos:
1.- Arrastrar una instancia del componente DateField y nombrarlo como "miCalendario"
Existe diversas propiedades para configurar la apariencia del componente DateField. Una de ellas es establecer las etiquetas para los días de la semana. Por defecto, las etiquetas de los días de la semana son S, M, T, W, T, F, y S. El orden de las etiquetas siempre debe ser de Sunday a Saturday (de Domingo a Sabado). Por ejemplo, para pasarlo al castellano:
miCalendario.dayNames = ["D", "L", "M", "X", "J", "V", "S"];
Lo que si podemos hacer es alterar qué día de la semana se mostrará primero. Los posibles valores son desde 0 (Sunday) a 6 (Saturday). Por lo tanto, para fijar como primer día de la semana el Lunes lo podríamos hacer del siguiente modo:
miCalendario.dayNames = ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"]; miCalendario.firstDayOfWeek = 1;
También, y de un modo similar, se pueden ajustar los nombres de los meses con la propiedad monthNames, que indica los nombres de mes en la parte superior del componente DateField. El valor predeterminado es ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]. Ejemplo:
miCalendario.monthNames = ["Enero", "Febrero","Marzo","Abril", "Mayo", "Junio","Julio", "Agosto", "Septiembre","Octubre", "Noviembre", "Diciembre"];
Control de campos de texto input con Flash
Para crear un nuevo campo de texto con actionscript lo debemos hacer mediante la instrucción createTextField:
Sintaxis:
createTextField(NombreDeInstancia, Profundidad, PosicionX, PosicionY, Anchura, Altura)
Por ejemplo:
this.createTextField("miTexto", 1, 100, 100, 300, 100);
miTexto.text ="abc";
Es importante tener en cuenta que el parámetro profundidad determina el nivel de profundidad del nuevo campo de texto (posición de orden z) del clip de película. Cada nivel de profundidad sólo puede contener un objeto. Si se crea un nuevo campo de texto en una profundidad en la que ya hay un campo de texto, el nuevo campo de texto reemplaza al existente. Para evitar sobrescribir campos de texto existentes, es conveniente utilizar MovieClip.getInstanceAtDepth() con el fin de determinar si una profundidad ya está ocupada o el método MovieClip.getNextHighestDepth() para determinar la profundidad más alta no ocupada.
Para que el usuario pueda introducir texto, además, deberemos cambiar la propiedad type de createTextField. La propiedad type especifica el tipo de campo de texto. Existen dos valores: "dynamic", que especifica un campo de texto dinámico que el usuario no puede modificar, e "input", que especifica un campo de introducción de texto. Por ejemplo:
this.createTextField("miTexto", this.getNextHighestDepth(), 10, 10, 100, 22);
miTexto.border = true;
miTexto.type = "input";
miTexto.maxChars = 16;
Para restringir los caracteres que se pueden introducir en un campo de texto podemos hacer uso de la propiedad restrict. La propiedad restrict indica el conjunto de caracteres que los usuarios pueden introducir en el campo de texto. Si el valor es null, puede introducir cualquier carácter. Si es una cadena vacía, no se puede introducir ningún carácter. Si el valor es una cadena de caracteres, puede introducir caracteres solamente en la cadena del campo de texto. La cadena se examina de izquierda a derecha. Puede especificarse un rango utilizando un guión (-).
El siguiente ejemplo restringe a las letras de la 'a' a la 'e' minúsculas y las letras mayúsculas 'X','Y' y 'Z'.
miTexto.restrict = "abcdeXYZ";
El siguiente ejemplo especifica un rango de caracteres, haciendo uso del guión. Restringe a caracteres de la 'a' a la 'z' minúsculas y mayúsculas así como valores numéricos. Quedan fuera del rango todo lo que no sean caracteres alfanuméricos como signos de puntuación, comillas, espacios y otros caracteres no alfanuméricos.
miTexto.restrict ="a-zA-Z0-9";
Tambiñen podemos especificar caracteres que no queremos que entren dentro del rango de permitidos, usando el caracter (^). Todos los caracteres y rangos que sigan a este caracter no serán permitido. Por ejemplo:
miTexto.restrict = "^a-z";
// No permite minusculas pero
// todos los demas caracteres se permiten
// incluyendo mayusculas
miTexto.restrict = "0-9^5";
// Solo permite numeros, con la excepcion del 5
Ejemplo de utilizaci贸n de los componentes Loader y ProgressBar
El componente Loader es muy 煤til cuando queremos cargar contenido externo, por ejemplo a la hora de crear una galeria fotogr谩fica e ir cargando din谩micamente las im谩genes. Ees un contenedor que puede mostrar archivos SWF o JPEG (pero no archivos JPEG progresivos) y con el que podemos monitorizar la carga del contenido. Se puede ajustar el tama帽o del contenido del componente o cambiar su tama帽o para que quepa el contenido.Tiene las siguientes propiedades:
- Loader.autoLoad: Valor booleano que indica si el contenido se carga autom谩ticamente (true) o si es preciso llamar a Loader.load() (false).
- Loader.bytesLoaded: Propiedad de s贸lo lectura que indica el n煤mero de bytes que se han cargado.
- Loader.bytesTotal: Propiedad de s贸lo lectura que indica el n煤mero total de bytes del contenido.
- Loader.content: Referencia al contenido del componente Loader. Es una propiedad de s贸lo lectura.
- Loader.contentPath: Cadena que indica la URL del contenido que va a cargarse.
- Loader.percentLoaded: N煤mero que indica el porcentaje de contenido cargado. Es una propiedad de s贸lo lectura.
- Loader.scaleContent: Valor booleano que indica si el contenido se redimensiona para adaptarse al componente Loader (true) o si el componente Loader se redimensiona para adaptarse al contenido (false).
Y los siguientes eventos:
- Loader.complete: Se activa cuando el contenido termina de cargarse.
- Loader.progress: Se activa mientras se carga el contenido.
En este ejemplo vamos a utilizar el componente "Loader" y el componente "ProgressBar" para monitorizar la carga.
1.- Sobre un documento nuevo, arrastramos del panel de componente una instancia del componente progressBar.
2.- Nombramos esta instancia como "miProgressBar".
3.- Creamos una nueva capa y sobre 茅sta arrastramos del panel de componentes una instancia del componente Loader. Lo redimensionamos en funci贸n de nuestras necesidades y lo nombramos como "miLoader".
4.- Ahora tan s贸lo queda el c贸digo, que podemos poner en el fotograma vac铆o que se crear谩 al generar una tercera capa:
miLoader.autoLoad = false; miLoader.contentPath = "img01.jpg"; miProgressBar.source = miLoader; miLoader.load();





