10. 1
Capítulo 1: Información sobre este manual
En este manual se ofrecen unas bases para el desarrollo de aplicaciones en Adobe® ActionScript® 3.0. Para comprender
mejor las ideas y las técnicas descritas, debe estar familiarizado con conceptos de programación generales como, por
ejemplo, tipos de datos, variables, bucles y funciones. También hay que conocer conceptos básicos sobre la
programación orientada a objetos, como los conceptos de clase y herencia. Un conocimiento previo de ActionScript
1.0 o ActionScript 2.0 es útil pero no necesario.
Utilización de este manual
Los capítulos de este manual están organizados en los siguientes grupos lógicos para ayudarle a encontrar áreas
relacionadas de la documentación de ActionScript:
Este manual también contiene numerosos archivos de ejemplo que ilustran conceptos de programación de
aplicaciones para clases importantes o utilizadas frecuentemente. Los archivos de ejemplo se empaquetan de forma
que resulten fáciles de cargar y utilizar con Adobe® Flash® CS4 Professional y pueden incluir archivos envolventes. Sin
embargo, el núcleo del código de ejemplo es puro código ActionScript 3.0 que se puede utilizar en el entorno de
desarrollo que se prefiera.
Se puede escribir y compilar código ActionScript 3.0 de varias maneras:
• Mediante el entorno de desarrollo Adobe Flex Builder 3.
• Utilizando cualquier editor de texto y un compilador de línea de comandos, como el proporcionado con Flex
Builder 3.
• Usando la herramienta de edición Adobe ® Flash® CS4 Professional.
Para obtener más información sobre los entornos de desarrollo de ActionScript, consulte “Introducción a ActionScript
3.0” en la página 4
Para comprender los ejemplos de código de este manual no es necesario tener experiencia previa en el uso de entornos
de desarrollo integrados para ActionScript, como Flex Builder o la herramienta de edición de Flash. No obstante, es
conveniente consultar la documentación de estas herramientas para aprender a utilizarlas y a escribir y compilar
código ActionScript 3.0. Para obtener más información, consulte “Acceso a la documentación de ActionScript” en la
página 2.
Capítulo Descripción
En los capítulos 2 a 5 se ofrece información general
sobre la programación en ActionScript.
Se abordan los conceptos básicos de ActionScript 3.0, incluida la sintaxis del
lenguaje, sentencias, operadores y programación ActionScript orientada a objetos.
En los capítulos 6 a 11, se describen las clases y los tipos
de datos básicos de ActionScript 3.0.
Se describen los tipos de datos de nivel superior de ActionScript 3.0.
En los capítulos 12 a 32, se describen las API de Flash
Player y de Adobe AIR.
Se describen funciones importantes implementadas en paquetes y clases
específicos de Adobe Flash Player y Adobe AIR, como el control de eventos, los
objetos y la lista de visualización, las conexiones de red y las comunicaciones, la
entrada y salida de archivos, la interfaz externa, el modelo de seguridad de
aplicaciones, etc.
11. 2PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Información sobre este manual
Acceso a la documentación de ActionScript
Este manual se centra en describir ActionScript 3.0, un completo y eficaz lenguaje de programación orientado a
objetos. No incluye una descripción detallada del proceso de desarrollo de aplicaciones ni del flujo de trabajo en una
herramienta o arquitectura de servidor específica. Por ello, además de leer Programación con ActionScript 3.0, es
recomendable consultar otras fuentes de documentación al diseñar, desarrollar, probar e implementar aplicaciones de
ActionScript 3.0.
Documentación de ActionScript 3.0
En este manual se explican los conceptos relacionados con la programación en ActionScript 3.0, se muestran los
detalles de implementación y se proporcionan ejemplos que ilustran las características importantes del lenguaje. No
obstante, este manual no es una referencia del lenguaje exhaustiva. Para una referencia completa, consulte la
Referencia del lenguaje y componentes ActionScript 3.0, en la que se describen todas las clases, métodos, propiedades
y eventos del lenguaje. La Referencia del lenguaje y componentes ActionScript 3.0 proporciona información de
referencia detallada sobre el núcleo del lenguaje, los componentes de la herramienta de edición de Flash (paquetes fl)
y las API de Flash Player y de Adobe AIR (paquetes flash).
Documentación de Flash
Si utiliza la herramienta de edición de Flash, es posible que desee consultar estos manuales:
Manual Descripción
Utilización de Flash Describe la manera de desarrollar aplicaciones Web dinámicas en la herramienta
de edición de Flash.
Programación con ActionScript 3.0 Describe el uso específico del lenguaje ActionScript 3.0 y la API principal de Flash
Player y de Adobe AIR
Referencia del lenguaje y componentes ActionScript 3.0 Proporciona información sobre la sintaxis y el uso, así como ejemplos de código,
para los componentes de la herramienta de edición de Flash y la API de
ActionScript 3.0.
Utilización de componentes ActionScript 3.0 Explica los detalles del uso de componentes para desarrollar aplicaciones creadas
por Flash.
Desarrollo de aplicaciones de Adobe AIR con Flash CS4
Professional
Describe cómo desarrollar e implementar aplicaciones de Adobe AIR utilizando
ActionScript 3.0 y la API de Adobe AIR en Flash
Aprendizaje de ActionScript 2.0 en Adobe Flash Proporciona información general sobre la sintaxis de ActionScript 2.0 y sobre
cómo utilizar ActionScript 2.0 al trabajar con distintos tipos de objetos
Referencia del lenguaje ActionScript 2.0 Proporciona información sobre la sintaxis y el uso, así como ejemplos de código,
para los componentes de la herramienta de edición de Flash y la API de
ActionScript 2.0.
Utilización de componentes ActionScript 2.0 Explica de forma detallada cómo utilizar componentes de ActionScript 2.0 para
desarrollar aplicaciones creadas por Flash.
Referencia del lenguaje de componentes ActionScript 2.0 Describe cada componente disponible en la versión 2 de la arquitectura de
componentes de Adobe, junto con su API
Ampliación de Flash Describe los objetos, métodos y propiedades disponibles en la API de JavaScript
Introducción a Flash Lite 2.x Explica cómo utilizar Adobe® Flash® Lite™ 2.x para desarrollar aplicaciones y
proporciona información sobre la sintaxis y el uso, así como ejemplos de código
para las funciones de ActionScript disponibles en Flash Lite 2.x
12. 3PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Información sobre este manual
Recursos de aprendizaje de ActionScript
Además del contenido de estos manuales, Adobe proporciona regularmente artículos actualizados, ideas de diseño y
ejemplos en el Centro de desarrollo de Adobe y el Centro de diseño de Adobe.
Centro de desarrollo de Adobe
El Centro de desarrollo de Adobe contiene la información más actualizada sobre ActionScript, artículos sobre el
desarrollo de aplicaciones reales e información sobre nuevos problemas importantes. Consulte el Centro de desarrollo
de Adobe en http://www.adobe.com/es/devnet/.
Centro de diseño de Adobe
Póngase al día en diseño digital y gráficos en movimiento. Examine la obra de importantes artistas, descubra las nuevas
tendencias de diseño y mejore sus conocimientos con tutoriales, flujos de trabajo clave y técnicas avanzadas. Consulte
el centro cada quince días para ver tutoriales y artículos nuevos e inspirarse con las creaciones de las galerías. Consulte
el centro de diseño en www.adobe.com/designcenter/.
Desarrollo de aplicaciones de Flash Lite 2.x Explica cómo desarrollar aplicaciones de Flash Lite 2.x
Introducción a ActionScript en Flash Lite 2.x Ofrece una introducción al desarrollo de aplicaciones Flash Lite 2.x y describe
todas las funciones de ActionScript disponibles para los desarrolladores de Flash
Lite 2.x
Referencia del lenguaje ActionScript de Flash Lite 2.x Proporciona información sobre la sintaxis y el uso, así como ejemplos de código,
de la API de ActionScript 2.0 disponible en Flash Lite 2.x
Introducción a Flash Lite 1.x Proporciona una introducción a Flash Lite 1.x y describe el modo de comprobar
contenido con el emulador de Adobe® Device Central CS4
Desarrollo de aplicaciones de Flash Lite 1.x DescribelamaneradedesarrollaraplicacionesparadispositivosmóvilesconFlash
Lite 1.x
Aprendizaje de ActionScript en Flash Lite 1.x Explica cómo utilizar ActionScript en aplicaciones de Flash Lite 1.x y describe
todas las funciones de ActionScript disponibles en Flash Lite 1.x
Referencia del lenguaje ActionScript de Flash Lite 1.x Describe la sintaxis y el modo de uso de los elementos de ActionScript disponibles
en Flash Lite 1.x
Manual Descripción
13. 4
Capítulo 2: Introducción a ActionScript
3.0
En este capítulo se ofrece información general sobre Adobe® ActionScript® 3.0, una de las versiones más recientes e
innovadoras de ActionScript.
ActionScript
ActionScript es el lenguaje de programación para los entornos de tiempo de ejecución de Adobe® Flash® Player y
Adobe® AIR™. Entre otras muchas cosas, activa la interactividad y la gestión de datos en el contenido y las aplicaciones
de Flash, Flex y AIR.
ActionScript se ejecuta mediante la máquina virtual ActionScript (AVM), que forma parte de Flash Player y AIR. El
código de ActionScript se suele compilar en un formato de código de bytes (un tipo de lenguaje que los ordenadores
pueden escribir y comprender) mediante un compilador, como el incorporado en Adobe® Flash® CS4 Professional o
Adobe® Flex™ Builder™ o el que está disponible en el SDK de Adobe® Flex™. El código de bytes está incorporado en los
archivos SWF ejecutados por Flash Player y AIR.
ActionScript 3.0 ofrece un modelo de programación robusto que resultará familiar a los desarrolladores con
conocimientos básicos sobre programación orientada a objetos. Algunas de las principales funciones de ActionScript
3.0 que mejoran las versiones anteriores son:
• Una nueva máquina virtual de ActionScript, denominada AVM2, que utiliza un nuevo conjunto de instrucciones
de código de bytes y proporciona importantes mejoras de rendimiento.
• Una base de código de compilador más moderna que realiza mejores optimizaciones que las versiones anteriores
del compilador.
• Una interfaz de programación de aplicaciones (API) ampliada y mejorada, con un control de bajo nivel de los
objetos y un auténtico modelo orientado a objetos.
• Una API XML basada en la especificación de ECMAScript para XML (E4X) (ECMA-357 edición 2). E4X es una
extensión del lenguaje ECMAScript que añade XML como un tipo de datos nativo del lenguaje.
• Un modelo de eventos basado en la especificación de eventos DOM (modelo de objetos de documento) de nivel 3.
Ventajas de ActionScript 3.0
ActionScript 3.0 aumenta las posibilidades de creación de scripts de las versiones anteriores de ActionScript. Se ha
diseñado para facilitar la creación de aplicaciones muy complejas con conjuntos de datos voluminosos y bases de
código reutilizables y orientadas a objetos. Aunque no se requiere para el contenido que se ejecuta en Adobe Flash
Player, ActionScript 3.0 permite introducir unas mejoras de rendimiento que sólo están disponibles con AVM2, la
nueva máquina virtual. El código ActionScript 3.0 puede ejecutarse con una velocidad diez veces mayor que el código
ActionScript heredado.
La versión anterior de la máquina virtual ActionScript (AVM1) ejecuta código ActionScript 1.0 y ActionScript 2.0.
Flash Player 9 y 10 admiten AVM9 por compatibilidad con contenido existente y heredado de versiones anteriores.
Para obtener más información, consulte “Compatibilidad con versiones anteriores” en la página 7.
14. 5PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript 3.0
Novedades de ActionScript 3.0
Aunque ActionScript 3.0 contiene muchas clases y funciones que resultarán familiares a los programadores de
ActionScript, la arquitectura y los conceptos de ActionScript 3.0 difieren de las versiones anteriores de ActionScript.
ActionScript 3.0 incluye algunas mejoras como, por ejemplo, nuevas funciones del núcleo del lenguaje y una API de
Flash Player mejorada que proporciona un mayor control de objetos de bajo nivel.
Nota: las aplicaciones de Adobe® AIR™ también pueden utilizar las API de Flash Player.
Funciones del núcleo del lenguaje
El núcleo del lenguaje está formado por los bloques básicos del lenguaje de programación, como sentencias,
expresiones, condiciones, bucles y tipos. ActionScript 3.0 contiene muchas funciones nuevas que aceleran el proceso
de desarrollo.
Excepciones de tiempo de ejecución
ActionScript 3.0 notifica más situaciones de error que las versiones anteriores de ActionScript. Las excepciones de
tiempo de ejecución se utilizan en situaciones de error frecuentes y permiten mejorar la depuración y desarrollar
aplicaciones para gestionar errores de forma robusta. Los errores de tiempo de ejecución pueden proporcionar trazas
de pila con la información del archivo de código fuente y el número de línea. Esto permite identificar rápidamente los
errores.
Tipos de tiempo de ejecución
En ActionScript 2.0, las anotaciones de tipos eran principalmente una ayuda para el desarrollador; en tiempo de
ejecución, se asignaban los tipos dinámicamente a todos los valores. En ActionScript 3.0, la información de tipos se
conserva en tiempo de ejecución y se utiliza con diversos fines. Flash Player y Adobe AIR realizan una verificación de
tipos en tiempo de ejecución, mejorando la seguridad de los tipos del sistema. La información de tipos también se
utiliza para especificar variables en representaciones nativas de la máquina, lo que mejora el rendimiento y reduce el
uso de memoria.
Clases cerradas
ActionScript 3.0 introduce el concepto de clases cerradas. Una clase cerrada posee únicamente el conjunto fijo de
propiedades y métodos definidos durante la compilación; no es posible añadir propiedades y métodos adicionales.
Esto permite realizar una comprobación más estricta en tiempo de compilación, lo que aporta una mayor solidez a los
programas. También mejora el uso de memoria, pues no requiere una tabla hash interna para cada instancia de objeto.
Además, es posible utilizar clases dinámicas mediante la palabra clave dynamic. Todas las clases de ActionScript 3.0
están cerradas de forma predeterminada, pero pueden declararse como dinámicas con la palabra clave dynamic.
Cierres de métodos
ActionScript 3.0 permite que un cierre de método recuerde automáticamente su instancia de objeto original. Esta
función resulta útil en la gestión de eventos. En ActionScript 2.0, los cierres de métodos no recordaban la instancia de
objeto de la que se habían extraído, lo que provocaba comportamientos inesperados cuando se llamaba al cierre de
método. La clase mx.utils.Delegate permitía solucionar este problema, pero ya no es necesaria.
15. 6PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript 3.0
ECMAScript for XML (E4X)
ActionScript 3.0 implementa ECMAScript for XML (E4X), recientemente estandarizado como ECMA-357. E4X
ofrece un conjunto fluido y natural de construcciones del lenguaje para manipular XML. Al contrario que las API de
análisis de XML tradicionales, XML con E4X se comporta como un tipo de datos nativo del lenguaje. E4X optimiza el
desarrollo de aplicaciones que manipulan XML, pues reduce drásticamente la cantidad de código necesario. Para
obtener más información sobre la implementación de E4X en ActionScript 3.0, consulte “Trabajo con XML” en la
página 232.
Para ver la especificación de E4X publicada por ECMA, visite www.ecma-international.org.
Expresiones regulares
ActionScript 3.0 ofrece compatibilidad nativa con expresiones regulares, que permiten encontrar y manipular cadenas
rápidamente. ActionScript 3.0 implementa la compatibilidad con expresiones regulares tal y como se definen en la
especificación del lenguaje ECMAScript (ECMA-262) edición 3.
Espacios de nombres
Los espacios de nombres son similares a los especificadores de acceso tradicionales que se utilizan para controlar la
visibilidad de las declaraciones (public, private, protected). Funcionan como especificadores de acceso
personalizados, con nombres elegidos por el usuario. Los espacios de nombres incluyen un identificador de recursos
universal (URI) para evitar colisiones y también se utilizan para representar espacios de nombres XML cuando se
trabaja con E4X.
Nuevos tipos simples
ActionScript 2.0 tiene un solo tipo numérico, Number, un número de coma flotante con precisión doble. ActionScript
3.0 contiene los tipos int y uint. El tipo int es un entero de 32 bits con signo que permite al código ActionScript
aprovechar las capacidades matemáticas de manipulación rápida de enteros de la CPU. Este tipo es útil para
contadores de bucle y variables en las que se usan enteros. El tipo uint es un tipo entero de 32 bits sin signo que resulta
útil para valores de colores RGB y recuentos de bytes, entre otras cosas.
Funciones de la API de Flash Player
Las API de Flash Player en ActionScript 3.0 contienen muchas de las clases que permiten controlar objetos a bajo nivel.
La arquitectura del lenguaje está diseñada para ser mucho más intuitiva que en versiones anteriores. Hay demasiadas
clases nuevas para poder tratarlas con detalle, de modo que en las siguientes secciones se destacan algunos cambios
importantes.
Nota: las aplicaciones de Adobe® AIR™ también puede utilizar las API de Flash Player.
Modelo de eventos DOM3
El modelo de eventos del modelo de objetos de documento de nivel 3 (DOM3) ofrece un modo estándar para generar
y gestionar mensajes de eventos de forma que los objetos de las aplicaciones puedan interactuar y comunicarse,
mantener su estado y responder a los cambios. Diseñado a partir de la especificación de eventos DOM de nivel 3 del
World Wide Web Consortium, este modelo proporciona un mecanismo más claro y eficaz que los sistemas de eventos
disponibles en versiones anteriores de ActionScript.
Los eventos y los eventos de error se encuentran en el paquete flash.events. La arquitectura de componentes de Flash
utiliza el mismo modelo de eventos que la API de Flash Player, de forma que el sistema de eventos está unificado en
toda la plataforma Flash.
16. 7PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript 3.0
API de la lista de visualización
La API de acceso a la lista de visualización de Flash Player y Adobe AIR (el árbol que contiene todos los elementos
visuales de una aplicación Flash) se compone de clases para trabajar con elementos visuales simples.
La nueva clase Sprite es un bloque básico ligero, similar a la clase MovieClip pero más apropiado como clase base de
los componentes de interfaz de usuario. La nueva clase Shape representa formas vectoriales sin procesar. Es posible
crear instancias de estas clases de forma natural con el operador new y se puede cambiar el elemento principal en
cualquier momento, de forma dinámica.
La administración de profundidad es ahora automática y está incorporada en Flash Player y Adobe AIR, por lo que ya
no es necesario asignar valores de profundidad. Se proporcionan nuevos métodos para especificar y administrar el
orden z de los objetos.
Gestión de contenido y datos dinámicos
ActionScript 3.0 contiene mecanismos para cargar y gestionar elementos y datos en la aplicación, que son intuitivos y
coherentes en toda la API. La nueva clase Loader ofrece un solo mecanismo para cargar archivos SWF y elementos de
imagen, y proporciona una forma de acceso a información detallada sobre el contenido cargado. La clase URLLoader
proporciona un mecanismo independiente para cargar texto y datos binarios en aplicaciones basadas en datos. La clase
Socket proporciona una forma de leer y escribir datos binarios en sockets de servidor en cualquier formato.
Acceso a datos de bajo nivel
Diversas API proporcionan acceso de bajo nivel a los datos, lo que supone una novedad en ActionScript. La clase
URLStream, implementada por URLLoader, proporciona acceso a los datos como datos binarios sin formato mientras
se descargan. La clase ByteArray permite optimizar la lectura, escritura y utilización de datos binarios. La nueva API
Sound proporciona control detallado del sonido a través de las clases SoundChannel y SoundMixer. Las nuevas API
relacionadas con la seguridad proporcionan información sobre los privilegios de seguridad de un archivo SWF o
contenido cargado, lo que permite gestionar mejor los errores de seguridad.
Trabajo con texto
ActionScript 3.0 contiene un paquete flash.text para todas las API relacionadas con texto. La clase TextLineMetrics
proporciona medidas detalladas para una línea de texto en un campo de texto; sustituye al método
TextFormat.getTextExtent() en ActionScript 2.0. La clase TextField contiene una serie de nuevos métodos
interesantes de bajo nivel que pueden ofrecer información específica sobre una línea de texto o un solo carácter en un
campo de texto. Dichos métodos son: getCharBoundaries(), que devuelve un rectángulo que representa el recuadro
de delimitación de un carácter, getCharIndexAtPoint(), que devuelve el índice del carácter en un punto
especificado, y getFirstCharInParagraph(), que devuelve el índice del primer carácter en un párrafo. Los métodos
de nivel de línea son: getLineLength(), que devuelve el número de caracteres en una línea de texto especificada, y
getLineText(), que devuelve el texto de la línea especificada. Una nueva clase Font proporciona un medio para
administrar las fuentes incorporadas en archivos SWF.
Compatibilidad con versiones anteriores
Como siempre, Flash Player proporciona compatibilidad completa con el contenido publicado previamente con
versiones anteriores. Cualquier contenido que se ejecutara en versiones anteriores de Flash Player puede ejecutarse en
Flash Player 9. Sin embargo, la introducción de ActionScript 3.0 en Flash Player 9 presenta algunos retos de
interoperabilidad entre el contenido antiguo y el contenido nuevo que se ejecuta en Flash Player 9. Algunos de los
problemas de compatibilidad que pueden surgir son:
• No se puede combinar código ActionScript 1.0 ó 2.0 con código ActionScript 3.0 en un archivo SWF.
17. 8PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript 3.0
• El código ActionScript 3.0 puede cargar un archivo SWF escrito en ActionScript 1.0 ó 2.0, pero no puede acceder a
las variables y funciones del archivo SWF.
• Los archivos SWF escritos en ActionScript 1.0 ó 2.0 no pueden cargar archivos SWF escritos en ActionScript 3.0.
Esto significa que los archivos SWF creados en Flash 8 o Flex Builder 1.5 o versiones anteriores no pueden cargar
archivos SWF de ActionScript 3.0.
La única excepción a esta regla es que un archivo SWF de ActionScript 2.0 puede sustituirse a sí mismo por un
archivo SWF de ActionScript 3.0, siempre y cuando el archivo SWF de ActionScript 2.0 no haya cargado ningún
elemento en ninguno de sus niveles. Para ello, el archivo SWF de ActionScript 2.0 debe realizar una llamada a
loadMovieNum(), pasando un valor 0 al parámetro level.
• En general, los archivos SWF escritos en ActionScript 1.0 ó 2.0 se deben migrar si van a funcionar de forma
conjunta con los archivos SWF escritos en ActionScript 3.0. Por ejemplo, supongamos que se ha creado un
reproductor de medios utilizando ActionScript 2.0. El reproductor carga distinto contenido que también se creó
utilizando ActionScript 2.0. No es posible crear nuevo contenido en ActionScript 3.0 y cargarlo en el reproductor
de medios. Es necesario migrar el reproductor de vídeo a ActionScript 3.0.
No obstante, si se crea un reproductor de medios en ActionScript 3.0, dicho reproductor puede realizar cargas
sencillas del contenido de ActionScript 2.0.
En la siguiente tabla se resumen las limitaciones de las versiones anteriores de Flash Player en lo referente a la carga de
nuevo contenido y a la ejecución de código, así como las limitaciones relativas a la reutilización de scripts entre
archivos SWF escritos en distintas versiones de ActionScript.
En la siguiente tabla, “Funcionalidad admitida” hace referencia al contenido que se ejecuta en Flash Player 9 o
posterior. El contenido ejecutado en Flash Player 8 o versiones anteriores puede cargar, mostrar, ejecutar y reutilizar
scripts únicamente de ActionScript 1.0 y 2.0.
Funcionalidad admitida Flash Player 7 Flash Player 8 Flash Player 9 y 10
Puede cargar archivos SWF publicados para 7 y versiones anteriores 8 y versiones anteriores 9 (o 10) y versiones anteriores
Contiene esta AVM AVM1 AVM1 AVM1 y AVM2
Ejecuta archivos SWF escritos en
ActionScript
1.0 y 2.0 1.0 y 2.0 1.0, 2.0 y 3.0
Funcionalidad admitida Contenido creado en ActionScript 1.0 y 2.0 Contenido creado en ActionScript 3.0
Puede cargar contenido y ejecutar código en
contenido creado en
Sólo ActionScript 1.0 y 2.0 ActionScript 1.0 y 2.0, y ActionScript 3.0
Puede reutilizar contenido de scripts creado
en
Sólo ActionScript 1.0 y 2.0 (ActionScript 3.0 a
través de conexión local)
ActionScript 1.0 y 2.0 a través de
LocalConnection.
ActionScript 3.0
18. 9
Capítulo 3: Introducción a ActionScript
Este capítulo se ha diseñado como punto de partida para empezar a programar en ActionScript. Aquí se proporcionan
las bases necesarias para comprender los conceptos y ejemplos descritos en el resto de páginas de este manual. Para
comenzar, se ofrece una descripción de los conceptos básicos de programación en el contexto de su aplicación en
ActionScript. También se tratan los aspectos fundamentales de la organización y creación de una aplicación
ActionScript.
Fundamentos de programación
Dado que ActionScript es un lenguaje de programación, será de gran ayuda comprender primero algunos conceptos
generales de programación de ordenadores.
Para qué sirven los programas informáticos
En primer lugar, resulta útil entender qué es un programa informático y para qué sirve. Un programa informático se
caracteriza por dos aspectos principales:
• Un programa es una serie de instrucciones o pasos que debe llevar a cabo el equipo.
• Cada paso implica en última instancia la manipulación de información o datos.
En general, un programa informático es simplemente una lista de instrucciones paso a paso que se dan al equipo para
que las lleve a cabo una a una. Cada una de las instrucciones se denomina sentencia. Como se verá a lo largo de este
manual, en ActionScript cada sentencia finaliza con un punto y coma.
Lo que realiza básicamente una instrucción dada en un programa es manipular algún bit de datos almacenado en la
memoria del equipo. En un caso sencillo, se puede indicar al equipo que sume dos números y almacene el resultado en
su memoria. En un caso más complejo, se podría tener un rectángulo dibujado en la pantalla y escribir un programa
para moverlo a algún otro lugar de la pantalla. El equipo realiza un seguimiento de determinada información relativa
al rectángulo: las coordenadas x e y que indican su ubicación, la anchura y altura, el color, etc. Cada uno de estos bits
de información se almacena en algún lugar de la memoria del equipo. Un programa para mover el rectángulo a otra
ubicación incluiría pasos como "cambiar la coordenada x a 200; cambiar la coordenada y a 150" (especificando nuevos
valores para las coordenadas x e y). Por supuesto, el equipo procesa estos datos de algún modo para convertir estos
números en la imagen que aparece en la pantalla; pero para el nivel de detalle que aquí interesa, basta con saber que el
proceso de "mover un rectángulo en la pantalla" sólo implica en realidad un cambio de bits de datos en la memoria del
equipo.
Variables y constantes
Dado que la programación implica principalmente cambiar datos en la memoria del equipo, tiene que haber una forma
de representar un solo dato en el programa. Una variable es un nombre que representa un valor en la memoria del
equipo. Cuando se escriben sentencias para manipular valores, se escribe el nombre de la variable en lugar del valor;
cuando el equipo ve el nombre de la variable en el programa, busca en su memoria y utiliza el valor que allí encuentra.
Por ejemplo, si hay dos variables denominadas value1 y value2, cada una de las cuales contiene un número, para
sumar esos dos números se podría escribir la sentencia:
value1 + value2
Cuando lleve a cabo los pasos indicados, el equipo buscará los valores de cada variable y los sumará.
19. 10PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
En ActionScript 3.0, una variable se compone realmente de tres partes distintas:
• El nombre de la variable
• El tipo de datos que puede almacenarse en la variable
• El valor real almacenado en la memoria del equipo
Se acaba de explicar cómo el equipo utiliza el nombre como marcador de posición del valor. El tipo de datos también
es importante. Cuando se crea una variable en ActionScript, se especifica el tipo concreto de datos que contendrá; a
partir de ahí, las instrucciones del programa sólo pueden almacenar ese tipo de datos en la variable y se puede
manipular el valor con las características particulares asociadas a su tipo de datos. En ActionScript, para crear una
variable (se conoce como declarar la variable), se utiliza la sentencia var:
var value1:Number;
En este caso, se ha indicado al equipo que cree una variable denominada value1, que contendrá únicamente datos
numéricos ("Number" es un tipo de datos específico definido en ActionScript). También es posible almacenar un valor
directamente en la variable:
var value2:Number = 17;
En Adobe Flash CS4 Professional hay otra forma posible de declarar una variable. Cuando se coloca un símbolo de clip
de película, un símbolo de botón o un campo de texto en el escenario, se le puede asignar un nombre de instancia en
el inspector de propiedades. En segundo plano, Flash crea una variable con el mismo nombre que la instancia, que se
puede utilizar en el código ActionScript para hacer referencia a ese elemento del escenario. Así, por ejemplo, si hay un
símbolo de clip de película en el escenario y se le asigna el nombre de instanciarocketShip, siempre que se use la
variable rocketShip en el código ActionScript, se estará manipulando dicho clip de película.
Una constante es muy similar a una variable en el sentido de que es un nombre que representa a un valor en la memoria
del equipo, con un tipo de datos específico. La diferencia es que a una constante sólo se le puede asignar un valor cada
vez en el curso de una aplicación ActionScript. Tras asignar un valor a una constante, éste permanecerá invariable en
toda la aplicación. La sintaxis para declarar constantes coincide con la de las variables, excepto por el hecho de que se
usa la palabra clave const en lugar de var:
const SALES_TAX_RATE:Number = 0.07;
Una constante resulta útil para definir un valor que se utilizará en varios puntos de un proyecto y que no cambiará en
circunstancias normales. Cuando se utiliza una constante en lugar de un valor literal el código resulta más legible. Por
ejemplo, es más fácil entender la finalidad de una línea de código que multiplica un precio por SALES_TAX_RATE que
la de una línea de código que lo haga por 0.07. Además, si en un momento dado es preciso cambiar el valor definido
por una constante, sólo habrá que hacerlo en un punto (la declaración de la constante) cuando se utiliza una constante
para su representación en el proyecto, en lugar de tener que modificarlo varias veces como cuando se utilizan valores
literales especificados en el código.
Tipos de datos
En ActionScript, hay muchos tipos de datos que pueden utilizarse como el tipo de datos de las variables que se crean.
Algunos de estos tipos de datos se pueden considerar "sencillos" o "fundamentales":
• String: un valor de texto como, por ejemplo, un nombre o el texto de un capítulo de un libro
• Numeric: ActionScript 3.0 incluye tres tipos de datos específicos para datos numéricos:
• Number: cualquier valor numérico, incluidos los valores fraccionarios o no fraccionarios
• int: un entero (un número no fraccionario)
• uint: un entero sin signo, es decir, que no puede ser negativo
20. 11PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
• Boolean: un valor true (verdadero) o false (falso), por ejemplo, si un conmutador está activado o si dos valores son
iguales
El tipo de datos sencillo representa a un solo elemento de información: por ejemplo, un único número o una sola
secuencia de texto. No obstante, la mayoría de los tipos de datos definidos en ActionScript podrían describirse como
tipos de datos complejos porque representan un conjunto de valores agrupados. Por ejemplo, una variable con el tipo
de datos Date representa un solo valor: un momento temporal. No obstante, ese valor de fecha se representa en realidad
en forma de diferentes valores: el día, el mes, el año, las horas, los minutos, los segundos, etc., los cuales son números
individuales. Así pues, aunque se perciba una fecha como un solo valor (y se pueda tratar como tal creando una
variable Date), internamente el equipo lo considera un grupo de varios valores que conjuntamente definen una sola
fecha.
La mayoría de los tipos de datos incorporados y los tipos de datos definidos por los programadores son complejos.
Algunos de los tipos de datos complejos que podrían reconocerse son:
• MovieClip: un símbolo de clip de película
• TextField: un campo de texto dinámico o de texto de entrada
• SimpleButton: un símbolo de botón
• Date: información sobre un solo momento temporal (una fecha y hora)
Para referirse a los tipos de datos, a menudo se emplean como sinónimos las palabras clase y objeto. Una clase es
simplemente la definición de un tipo de datos — es una especie de plantilla para todos los objetos del tipo de datos,
como afirmar que "todas las variables del tipo de datos Example tiene estas características: A, B y C". Un objeto, por
otra parte, es una instancia real de una clase; una variable cuyo tipo de datos sea MovieClip se podría describir como
un objeto MovieClip. Se puede decir lo mismo con distintos enunciados:
• El tipo de datos de la variable myVariable es Number.
• La variable myVariable es una instancia de Number.
• La variable myVariable es un objeto Number.
• La variable myVariable es una instancia de la clase Number.
Trabajo con objetos
ActionScript es lo que se denomina un lenguaje de programación orientado a objetos. La programación orientada a
objetos es simplemente un enfoque de la programación, es decir, una forma de organizar el código en un programa
mediante objetos.
Anteriormente se ha definido un programa informático como una serie de pasos o instrucciones que lleva a cabo el
equipo. Así pues, conceptualmente se podría imaginar un programa informático simplemente como una larga lista de
instrucciones. Sin embargo, en la programación orientada a objetos, las instrucciones del programa se dividen entre
distintos objetos; el código se agrupa en segmentos de funcionalidad, de modo que los tipos de funcionalidad
relacionados o los elementos de información relacionados se agrupan en un contenedor.
De hecho, si se ha trabajado con símbolos en Flash, se estará acostumbrado a trabajar con objetos. Supongamos que se
ha definido un símbolo de clip de película (por ejemplo, el dibujo de un rectángulo) y se ha colocado una copia del
mismo en el escenario. Dicho símbolo de clip de película también es (literalmente) un objeto en ActionScript; es una
instancia de la clase MovieClip.
21. 12PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
Es posible modificar algunas de las características del clip de película. Por ejemplo, cuando está seleccionado, es posible
cambiar algunos valores en el inspector de propiedades como, por ejemplo, la coordenada x o la anchura, o realizar
algunos ajustes de color como cambiar su valor de transparencia alfa o aplicarle un filtro de sombra. Otras
herramientas de Flash permiten realizar más cambios, como utilizar la herramienta Transformación libre para girar el
rectángulo. Todas estas acciones para modificar un símbolo de clip de película en el entorno de edición de Flash
también se pueden realizar en ActionScript cambiando los elementos de datos que se agrupan en un único paquete
denominado objeto MovieClip.
En la programación orientada a objetos de ActionScript, hay tres tipos de características que puede contener cualquier
clase:
• Propiedades
• Métodos
• Eventos
Estos elementos se utilizan conjuntamente para administrar los elementos de datos que utiliza el programa y para
decidir qué acciones deben llevarse a cabo y en qué orden.
Propiedades
Una propiedad representa uno de los elementos de datos que se empaquetan en un objeto. Un objeto Song (canción)
puede tener propiedades denominadas artist (artista) y title (título); la clase MovieClip tiene propiedades como
rotation (rotación), x, width (anchura) y alpha (alfa). Se trabaja con las propiedades del mismo modo que con las
variables individuales; de hecho, se podría pensar que las propiedades son simplemente las variables "secundarias"
contenidas en un objeto.
A continuación se muestran algunos ejemplos de código ActionScript que utiliza propiedades. Esta línea de código
mueve el objeto MovieClip denominado square a la coordenada x = 100 píxeles:
square.x = 100;
Este código utiliza la propiedad rotation para que el MovieClip square gire de forma correspondiente a la rotación del
MovieClip triangle:
square.rotation = triangle.rotation;
Este código altera la escala horizontal del MovieClip square para hacerlo 1,5 veces más ancho:
square.scaleX = 1.5;
Fíjese en la estructura común: se utiliza una variable (square, triangle) como nombre del objeto, seguida de un
punto (.) y, a continuación, el nombre de la propiedad (x, rotation, scaleX). El punto, denominado operador de
punto, se utiliza para indicar el acceso a uno de los elementos secundarios de un objeto. El conjunto de la estructura
(nombre de variable-punto-nombre de propiedad) se utiliza como una sola variable, como un nombre de un solo valor
en la memoria del equipo.
Métodos
Un método es una acción que puede llevar a cabo un objeto. Por ejemplo, si se ha creado un símbolo de clip de película
en Flash con varios fotogramas clave y animación en la línea de tiempo, ese clip de película podrá reproducirse,
detenerse o recibir instrucciones para mover la cabeza lectora a un determinado fotograma.
Este código indica al objeto MovieClip denominado shortFilm que inicie su reproducción:
shortFilm.play();
22. 13PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
Esta línea hace que el MovieClip denominado shortFilm deje de reproducirse (la cabeza lectora se detiene como si se
hiciera una pausa en un vídeo):
shortFilm.stop();
Este código hace que un MovieClip denominado shortFilm mueva su cabeza lectora al fotograma 1 y deje de
reproducirse (como si se rebobinara un vídeo):
shortFilm.gotoAndStop(1);
Como puede verse, para acceder a los métodos, se debe escribir el nombre del objeto (una variable), un punto y el
nombre del método seguido de un paréntesis, siguiendo la misma estructura que para las propiedades. El paréntesis es
una forma de indicar que se está llamando al método, es decir, indicando al objeto que realice esa acción. Algunos
valores (o variables) se incluyen dentro del paréntesis para pasar información adicional necesaria para llevar a cabo la
acción. Estos valores se denominan parámetros del método. Por ejemplo, el método gotoAndStop() necesita saber
cuál es el fotograma al que debe dirigirse, de modo que requiere un solo parámetro en el paréntesis. Otros métodos
como play() y stop() no requieren información adicional porque son descriptivos por sí mismos. Sin embargo,
también se escriben con paréntesis.
A diferencia de las propiedades (y las variables), los métodos no se usan como identificadores de valores. No obstante,
algunos métodos pueden realizar cálculos y devolver un resultado que puede usarse como una variable. Por ejemplo,
el método toString() de la clase Number convierte el valor numérico en su representación de texto:
var numericData:Number = 9;
var textData:String = numericData.toString();
Por ejemplo, se usaría el método toString() para mostrar el valor de una variable Number en un campo de texto de
la pantalla. La propiedad text de la clase TextField (que representa el contenido de texto real que se muestra en la
pantalla) se define como String (cadena), de modo que sólo puede contener valores de texto. Esta línea de código
convierte en texto el valor numérico de la variable numericData y, a continuación, hace que aparezca en la pantalla en
el objeto TextField denominado calculatorDisplay:
calculatorDisplay.text = numericData.toString();
Eventos
Se ha descrito un programa informático como una serie de instrucciones que el ordenador lleva a cabo paso a paso.
Algunos programas informáticos sencillos no son más que eso: unos cuantos pasos que el ordenador ejecuta, tras los
cuales finaliza el programa. Sin embargo, los programas de ActionScript se han diseñado para continuar ejecutándose,
esperando los datos introducidos por el usuario u otras acciones. Los eventos son los mecanismos que determinan qué
instrucciones lleva a cabo el ordenador y cuándo las realiza.
Básicamente, los eventos son acciones que ActionScript conoce y a las que puede responder. Muchos eventos se
relacionan con la interacción del usuario (hacer clic en un botón, presionar una tecla del teclado, etc.) pero también
existen otros tipos de eventos. Por ejemplo, si se usa ActionScript para cargar una imagen externa, existe un evento
que puede indicar al usuario cuándo finaliza la carga de la imagen. En esencia, cuando se ejecuta un programa de
ActionScript, Adobe Flash Player y Adobe AIR simplemente esperan a que ocurran determinadas acciones y, cuando
suceden, ejecutan el código ActionScript que se haya especificado para tales eventos.
23. 14PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
Gestión básica de eventos
La técnica para especificar determinadas acciones que deben realizarse como respuesta a eventos concretos se
denomina gestión de eventos. Cuando se escribe código ActionScript para llevar a cabo la gestión de eventos, se deben
identificar tres elementos importantes:
• El origen del evento: ¿en qué objeto va a repercutir el evento? Por ejemplo, ¿en qué botón se hará clic o qué objeto
Loader está cargando la imagen? El origen del evento también se denomina objetivo del evento, ya que es el objeto
al que Flash Player o AIR destinan el evento (es decir, donde éste tiene lugar realmente).
• El evento: ¿qué va a suceder, a qué se va a responder? Es importante identificar esto porque muchos objetos activan
varios eventos.
• La respuesta: ¿qué pasos hay que llevar a cabo cuando ocurra el evento?
Siempre que se escriba código ActionScript para gestionar eventos, el código debe incluir estos tres elementos y debe
seguir esta estructura básica (los elementos en negrita son marcadores de posición que hay que completar en cada caso
concreto):
function eventResponse(eventObject:EventType):void
{
// Actions performed in response to the event go here.
}
eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);
Este código realiza dos acciones. En primer lugar, define una función, que es la forma de especificar las acciones que
desean realizarse como respuesta al evento. A continuación, llama al método addEventListener() del objeto de
origen, básicamente "suscribiendo" la función al evento especificado de modo que se lleven a cabo las acciones de la
función cuando ocurra el evento. Cada una de estas partes se tratará con mayor detalle.
Una función proporciona un modo de agrupar acciones con un único nombre que viene a ser un nombre de método
abreviado para llevar a cabo las acciones. Una función es idéntica a un método excepto en que no está necesariamente
asociada a una clase determinada (de hecho, es posible definir un método como una función asociada a una clase
determinada). Cuando se crea una función para la gestión de eventos, se debe elegir el nombre de la función
(denominada eventResponse en este caso). Además, se debe especificar un parámetro (denominado eventObject
en este ejemplo). Especificar un parámetro de una función equivale a declarar una variable, de modo que también hay
que indicar el tipo de datos del parámetro. (En este ejemplo, el tipo de datos del parámetro es EventType.)
Cada tipo de evento que se desee detectar tiene asociada una clase de ActionScript. El tipo de datos especificado para
el parámetro de función es siempre la clase asociada del evento concreto al que se desea responder. Por ejemplo, un
evento click (el cual se activa al hacer clic en un elemento con el ratón) se asocia a la clase MouseEvent. Cuando se
vaya a escribir una función de detector para un evento click, ésta se debe definir con un parámetro con el tipo de
datos MouseEvent. Por último, entre las llaves de apertura y cierre ({ ... }), se escriben las instrucciones que debe llevar
a cabo el equipo cuando ocurra el evento.
Después de escribir la función de gestión de eventos, es necesario indicar al objeto de origen del evento (el objeto en
el que se produce el evento, por ejemplo, el botón) que se desea llamar a la función cuando ocurra el evento. Para ello
es necesario llamar al método addEventListener() de dicho objeto (todos los objetos que tienen eventos también
tienen un método addEventListener()). El método addEventListener() utiliza dos parámetros:
• En primer lugar, el nombre del evento específico al que se desea responder. De nuevo, cada evento se asocia a una
clase específica, que tiene a su vez un valor especial predefinido para cada evento (como un nombre exclusivo
propio del evento), que debe usarse como primer parámetro.
• En segundo lugar, el nombre de la función de respuesta al evento. Hay que tener en cuenta que el nombre de una
función debe escribirse sin paréntesis cuando se pasa como un parámetro.
24. 15PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
Análisis del proceso de gestión de eventos
A continuación se ofrece una descripción paso a paso del proceso que tiene lugar cuando se crea un detector de
eventos. En este caso, es un ejemplo de creación de función de detector a la que se llama cuando se hace clic en un
objeto denominado myButton.
El código escrito por el programador es el siguiente:
function eventResponse(event:MouseEvent):void
{
// Actions performed in response to the event go here.
}
myButton.addEventListener(MouseEvent.CLICK, eventResponse);
Al ejecutarse en Flash Player, el código funcionaría de la manera siguiente. (El comportamiento es idéntico en Adobe AIR):
1 Cuando se carga el archivo SWF, Flash Player detecta que existe una función denominada eventResponse().
25. 16PROGRAMACIÓN CON ACTIONSCRIPT 3.0 PARA FLASH
Introducción a ActionScript
2 A continuación, Flash Player ejecuta el código (específicamente, las líneas de código que no están en una función).
En este caso se trata de una sola línea de código: para llamar al método addEventListener() en el objeto de origen
del evento (denominado myButton) y pasar la función eventResponse como parámetro.
a Internamente, myButton tiene una lista de funciones que detecta cada uno de sus eventos, por lo que cuando se
llama a su método addEventListener(), myButton almacena la función eventResponse() en su lista de
detectores de eventos.
3 Cuando el usuario hace clic en el objeto myButton, se activa el evento click (identificado como
MouseEvent.CLICK en el código).