Manual Action Script 2.0 en Flash 8
Manual Action Script 2.0 en Flash 8
Manual Action Script 2.0 en Flash 8
0 en Flash
Marcas comerciales
1 Step RoboPDF, ActiveEdit, ActiveTest, Authorware, Blue Sky Software, Blue Sky, Breeze, Breezo, Captivate, Central,
ColdFusion, Contribute, Database Explorer, Director, Dreamweaver, Fireworks, Flash, FlashCast, FlashHelp, Flash Lite,
FlashPaper, Flash Video Encoder, Flex, Flex Builder, Fontographer, FreeHand, Generator, HomeSite, JRun, MacRecorder,
Macromedia, MXML, RoboEngine, RoboHelp, RoboInfo, RoboPDF, Roundtrip, Roundtrip HTML, Shockwave, SoundEdit,
Studio MX, UltraDev y WebHelp son marcas registradas o marcas comerciales de Macromedia, Inc. y pueden estar registradas en
Estados Unidos o en otras jurisdicciones, incluidas las internacionales. Otros nombres de productos, logotipos, diseños, títulos,
palabras o frases mencionados en esta publicación pueden ser marcas comerciales, marcas de servicio o nombres comerciales de
Macromedia, Inc. o de otras entidades y pueden estar registrados en ciertas jurisdicciones, incluidas las internacionales.
Información de terceros
Esta guía contiene vínculos a sitios Web de terceros que no están bajo el control de Macromedia y, por consiguiente, Macromedia
no se hace responsable del contenido de dichos sitios Web. El acceso a uno de los sitios Web de terceros mencionados en esta guía
será a cuenta y riesgo del usuario. Macromedia proporciona estos vínculos únicamente como ayuda y su inclusión no implica que
Macromedia se haga responsable del contenido de dichos sitios Web.
Navegador Opera® Copyright © 1995-2002 Opera Software ASA y sus proveedores. Todos los derechos reservados.
Macromedia Flash 8 Video funciona con tecnología de vídeo TrueMotion de On2 Technologies. © 1992-2005 On2
Technologies, Inc. Todos los derechos reservados. http://www.on2.com.
Visual SourceSafe es una marca registrada o una marca comercial de Microsoft Corporation en Estados Unidos y/u otros países.
Copyright © 2005 Macromedia, Inc. Todos los derechos reservados. No se permite la copia, fotocopia, reproducción,
traducción ni la conversión en formato electrónico o legible por equipos, ya sea de forma total o parcial de este manual, sin
la autorización previa por escrito de Macromedia, Inc. No obstante, el propietario o usuario autorizado de una copia
válida del software con la que se proporcionó este manual puede imprimir una copia del manual a partir de una versión
electrónica del mismo, con el solo fin de aprender a usar dicho software, siempre que no se imprima, reproduzca, revenda
o transmita ninguna parte de este manual para cualquier otro propósito, incluidos, sin limitación, fines comerciales, como
la venta de copias de esta documentación o el suministro de servicios de soporte pagados.
Agradecimientos
Dirección del proyecto: Sheila McGinn
Redacción: Jen deHaan; Peter deHaan, Joey Lott
Directora de edición: Rosana Francescato
Redactora jefe: Lisa Stanziano
Edición: Linda Adler, Geta Carlson, Evelyn Eldridge, John Hammett, Mary Kraemer, Noreen Maher, Jessie Wood, Anne Szabla
Dirección de la producción: Patrice O’Neill, Kristin Conradi, Yuko Yagi
Producción y diseño multimedia: Adam Barnett, Aaron Begley, Paul Benkman. John Francis, Geeta Karmarkar, Masayo Noda,
Paul Rangel, Arena Reed, Mario Reynoso
Reconocimiento especial a Jody Bleyle, Mary Burger, Lisa Friendly, Stephanie Gowin, Bonnie Loo, Mary Ann Walsh, Erick Vera,
Jorge G. Villanueva, responsables de las pruebas realizadas a la versión beta, y a la totalidad de los equipos de diseño y control de
calidad de Flash y Flash Player.
Macromedia, Inc.
601 Townsend St.
San Francisco, CA 94103, EE.UU.
Contenido
Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Destinatarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Requisitos del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Actualización de archivos XML de Flash . . . . . . . . . . . . . . . . . . . . . . . . . 10
Documentación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Recursos adicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Capítulo 3: ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Qué es ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
Selección entre ActionScript 1.0 y ActionScript 2.0 . . . . . . . . . . . . . . .73
ActionScript y Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
3
Capítulo 4: Principios básicos de la sintaxis y el lenguaje . . . . . . 75
Sintaxis, sentencias y expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Sintaxis con puntos y rutas de destino . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Signos de lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Constantes y palabras clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Sentencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4 Contenido
Capítulo 9: Gestión de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Utilización de métodos de controlador de eventos. . . . . . . . . . . . . . . 306
Utilización de detectores de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Utilización de detectores de eventos con componentes. . . . . . . . . . . 311
Utilización de controladores de eventos de botones y de clips
de película . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Difusión de eventos desde instancias de componentes . . . . . . . . . . .318
Creación de clips de película con estados de botón. . . . . . . . . . . . . . .319
Ámbito del controlador de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Ámbito de la palabra clave this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Utilización de la clase Delegate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Contenido 5
Capítulo 12: Utilización de texto y cadenas . . . . . . . . . . . . . . . . 407
Campos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Carga de texto y variables en los campos de texto . . . . . . . . . . . . . . . 419
Utilización de fuentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Representación de fuentes y texto suavizado. . . . . . . . . . . . . . . . . . . 434
Diseño y formato de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Aplicación de formato al texto con hojas de estilos en cascada . . . . 451
Utilización de texto en formato HTML . . . . . . . . . . . . . . . . . . . . . . . . . .465
Ejemplo: Creación de texto desplazable . . . . . . . . . . . . . . . . . . . . . . . .479
Cadenas y la clase String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
6 Contenido
Capítulo 16: Trabajo con datos externos . . . . . . . . . . . . . . . . . . . 671
Envío y carga de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Utilización del protocolo HTTP para conectar con scripts
de servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
Carga y descarga de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Lenguaje XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
Envío de mensajes hacia y desde Flash Player . . . . . . . . . . . . . . . . . . 700
Interfaz API externa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Contenido 7
Apéndice D: Escritura de scripts para versiones anteriores
de Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Utilización de versiones anteriores de Flash Player . . . . . . . . . . . . . .833
Utilización de Flash 8 para crear contenido para Flash Player 4 . . .834
8 Contenido
Introducción
Macromedia Flash Basic 8 y Macromedia Flash Professional 8 son las herramientas estándar
de edición profesional para la creación de publicaciones Web de gran impacto. ActionScript es
el lenguaje que deberá utilizar para añadir interactividad a aplicaciones Flash, tanto si las
aplicaciones son simples archivos SWF de animación como si son complejas aplicaciones de
Internet. Para utilizar Flash, no es necesario utilizar ActionScript, pero si desea ofrecer a los
usuarios interacción básica o compleja, trabajar con objetos que no sean los incorporados en
Flash (como por ejemplo, botones y clips de película) o convertir un archivo SWF en una
experiencia de usuario más fiable, es posible que desee utilizar este lenguaje.
Para más información, consulte los temas siguientes:
Destinatarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Actualización de archivos XML de Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Requisitos del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Documentación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Recursos adicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Destinatarios
En este manual se presupone que el usuario ya ha instalado Flash Basic 8 o Flash
Professional 8 y sabe cómo utilizarlo. Deberá saber cómo colocar objetos en el escenario y
cómo manipularlos en el entorno de edición de Flash. Si ha utilizado lenguajes de creación de
scripts anteriormente, ActionScript le resultará familiar. No obstante, aunque no tenga
experiencia en programación, le resultará fácil aprender a utilizar ActionScript. Se puede
empezar con comandos muy simples y aumentar el grado de complejidad conforme se va
avanzando. Puede añadir gran cantidad de interactividad a sus archivos sin tener que aprender
(ni escribir) gran cantidad de código.
9
Requisitos del sistema
Los componentes de ActionScript 2.0 no exigen ningún requisito del sistema adicional a los
de Flash 8.
En este manual se presupone que el usuario utiliza la configuración de publicación
predeterminada para los archivos Flash: Flash Player 8 y ActionScript 2.0. Si cambia alguno de
estos valores, es posible que las explicaciones y los ejemplos de código que se muestran en la
documentación no sean válidos. Si desarrolla aplicaciones para versiones anteriores de Flash
Player, consulte el Apéndice D, “Escritura de scripts para versiones anteriores de Flash Player”,
en la página 833.
10 Introducción
Documentación
Este manual proporciona información general sobre la sintaxis de ActionScript y cómo utilizar
ActionScript cuando se trabaja con distintos tipos de objetos. Para obtener detalles sobre la
sintaxis y el uso de cada uno de los elementos de lenguaje, consulte Referencia del lenguaje
ActionScript 2.0.
Para más información, consulte los temas siguientes:
■ “Información general sobre el libro Aprendizaje de ActionScript 2.0” en la página 11
■ “Archivos de muestra” en la página 15
■ “Términos utilizados en este documento” en la página 14
■ “Copiar y pegar código” en la página 14
Documentación 11
■ El Capítulo 9, “Gestión de eventos”, explica varias maneras distintas de controlar los
eventos: métodos de controlador de eventos, detectores de eventos y controladores de
eventos de clip de película y de botón.
■ El Capítulo 10, “Datos y tipos de datos”, describe la terminología y los conceptos básicos
de datos, tipos de datos y variables. Estos conceptos se utilizan en todo el manual.
■ El Capítulo 11, “Trabajo con clips de película”, describe clips de película y el código
ActionScript que puede utilizar para controlarlos.
■ El Capítulo 12, “Utilización de texto y cadenas”, examina las distintas maneras en las que
se puede controlar texto y cadenas en Flash e incluye información sobre el formato de
texto y FlashType (representación de texto avanzada, como el texto suavizado).
■ El Capítulo 13, “Animaciones, filtros y dibujos”, explica cómo crear imágenes y animación
basadas en código, añadir filtros a objetos y dibujar con ActionScript.
■ El Capítulo 14, “Creación de interacciones con ActionScript”, describe algunos métodos
sencillos para crear aplicaciones más interactivas, incluido el control de reproducción de
archivos SWF, la creación de punteros personalizados y la creación de controles de sonido.
■ El Capítulo 15, “Utilización de imágenes, sonido y vídeo”, describe la forma de importar a
las aplicaciones Flash archivos multimedia externos, como imágenes de mapa de bits,
archivos MP3, archivos de Flash Video (FLV) y otros archivos SWF. En este capítulo se
incluye también información general sobre cómo trabajar con vídeo en las aplicaciones, así
como la forma de crear una barra de progreso que carga las animaciones.
■ El Capítulo 16, “Trabajo con datos externos”, describe cómo procesar datos de fuentes
externas utilizando scripts de servidor o de cliente en las aplicaciones. En este capítulo se
explica cómo integrar datos con las aplicaciones.
■ El Capítulo 17, “Aspectos básicos de la seguridad”, explica la seguridad en Flash Player,
que se aplica al trabajo con archivos SWF situados localmente en el disco duro. En este
capítulo se indican también los problemas de seguridad entre dominios y cómo cargar
datos de servidores o entre dominios.
■ El Capítulo 18, “Depuración de aplicaciones”, describe el depurador de ActionScript
incluido en Flash que facilita la escritura de aplicaciones.
■ El Capítulo 19, “Recomendaciones y convenciones de codificación para ActionScript
2.0”, explica cuáles son las prácticas recomendadas a la hora de utilizar Flash y escribir
ActionScript. En este capítulo se enumeran también las convenciones de codificación
estándar, como la asignación de nombre a las variables, además de otras convenciones.
■ El Apéndice A, “Mensajes de error”, contiene la lista de mensajes de error que el
compilador de Flash puede generar.
■ El Apéndice B, “Operadores de Flash 4 no admitidos”, enumera todos los operadores de
Flash 4 y su asociatividad.
12 Introducción
■ El Apéndice C, “Teclas del teclado y valores de códigos de tecla”, muestra todas las teclas
de un teclado estándar y los valores correspondientes del código de tecla ASCII utilizados
para identificar las teclas en ActionScript.
■ El Apéndice D, “Escritura de scripts para versiones anteriores de Flash Player”,
proporciona las directrices que le ayudarán a escribir scripts con una sintaxis correcta para
la versión de reproductor que desea utilizar.
■ El Apéndice E, “Programación orientada a objetos con ActionScript 1.0”, ofrece
información sobre la utilización del modelo de objetos de ActionScript 1.0 para escribir
scripts.
■ El Apéndice F, “Terminología”, incluye una lista de la terminología que se utiliza con
mayor frecuencia al trabajar con el lenguaje ActionScript y ofrece descripciones de los
distintos términos.
En este manual se explica cómo utilizar el lenguaje ActionScript. Para obtener información
sobre los elementos del lenguaje propiamente dichos, consulte la Referencia del lenguaje
ActionScript 2.0.
Convenciones tipográficas
En este manual se utilizan las convenciones tipográficas siguientes:
■ La fuente de código indica que se trata de código de ActionScript.
■ La fuente de código en negrita, que normalmente aparece dentro de un
procedimiento, indica código que debe modificar o añadir al código que ya ha
incorporado al archivo FLA. En algunos casos, puede utilizarse para resaltar código que se
desea comprobar.
■ El texto en negrita indica datos que debe escribir en la interfaz de usuario, como el
nombre de un archivo o un nombre de instancia.
■ El texto en cursiva indica un término nuevo definido en el texto que sigue. En una ruta de
archivo, puede indicar un valor que debe sustituirse (por ejemplo, por el nombre de un
directorio de su propio disco duro).
Documentación 13
Términos utilizados en este documento
En este manual se utilizan los términos siguientes:
■ Usted hace referencia al desarrollador que escribe un script o una aplicación.
■ El usuario hace referencia a la persona que ejecutará los scripts y las aplicaciones.
■ La fase de compilación es la fase en la que se publica, exporta, prueba o depura un
documento.
■ El tiempo de ejecución es el espacio de tiempo en el que se ejecuta un script en Flash Player.
Los términos de ActionScript como método y objeto se definen en el Apéndice F,
“Terminología”, en la página 851.
pegar código ActionScript desde otras ubicaciones, como una página Web o un
documento de Microsoft Word.
Controle que los saltos de línea sean los correctos al copiar y pegar código. Cuando se pega
código desde otras ubicaciones, puede que la línea de código salte a la línea siguiente en una
ubicación incorrecta. Asegúrese de que el código de color de la sintaxis es el correcto en el
editor de ActionScript si piensa que los saltos de línea podrían ser un problema. Puede
comparar el código del panel Acciones con el del panel Ayuda para ver si coinciden. Pruebe a
activar la función Ajustar texto en el editor de ActionScript para ayudar a resolver el exceso de
saltos de líneas del código (seleccione Ver > Ajustar palabra en la ventana Script, o bien Ajustar
texto en el menú emergente del panel Acciones.)
14 Introducción
Recursos adicionales
Además de este manual sobre ActionScript, hay otros manuales sobre temas de Flash, como
componentes y Macromedia Flash Lite. Se puede acceder a cada manual del panel Ayuda
(Ayuda > Ayuda de Flash) desde la Tabla de contenido predeterminada. Haga clic en el botón
Borrar para ver cada uno de los manuales disponibles; para más información, consulte
“Dónde encontrar documentación sobre otros temas” en la página 18.
Para más información sobre los demás recursos disponibles, consulte los temas siguientes:
■ “Archivos de muestra” en la página 15
■ “Dónde encontrar archivos PDF o documentación impresa” en la página 16
■ “LiveDocs” en la página 16
■ “Recursos en línea adicionales” en la página 17
■ “Dónde encontrar documentación sobre otros temas” en la página 18
Archivos de muestra
Hay disponibles numerosos archivos de muestra basados en ActionScript que se instalan con
Flash. Estos archivos muestran cómo funciona el código en un archivo FLA y constituyen con
frecuencia una herramienta de aprendizaje muy útil. En los capítulos de este manual se suele
hacer referencia a estos archivos, pero se recomienda que también se consulte la carpeta de
archivos de muestra del disco duro.
Los archivos de muestra incluyen archivos FLA de aplicaciones que utilizan funcionalidad
común de Flash instalada con Flash. Estas aplicaciones se han diseñado para ayudar a los
nuevos desarrolladores de Flash a adentrarse en las posibilidades de las aplicaciones Flash, así
como para mostrar a los desarrolladores avanzados el modo en que funcionan las funciones de
Flash en su contexto.
Los archivos de origen de muestra centrados en ActionScript se pueden encontrar en la
carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/.
Recursos adicionales 15
Puede que encuentre útil los siguientes archivos de muestra centrados en componentes, ya que
contienen gran cantidad de código ActionScript. También se encuentran en la carpeta
Samples del disco duro:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\Components\.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/Components/.
También se pueden encontrar archivos de muestra adicionales para descargar en Internet. La
siguiente página Web contiene vínculos y descripciones de archivos de muestra adicionales:
www.macromedia.com/go/flash_samples_es/
LiveDocs
Se puede acceder a la documentación en el sitio Web de LiveDocs, además de poder hacerlo
desde el panel Ayuda. El sitio Web de LiveDocs contiene todas las páginas de la Ayuda de
Flash y podría contener comentarios que aclarasen, actualizasen o corrigiesen partes de la
documentación. Haga clic en Ver comentarios en LiveDocs en la parte inferior de una página
del panel Ayuda para ver la página equivalente en el sitio Web de LiveDocs. Vaya a http://
livedocs.macromedia.com para ver una lista de la documentación disponible en formato de
LiveDocs.
Escritores técnicos se encargan de supervisar el sitio Web de LiveDocs. Una de las ventajas de
LiveDocs es la posibilidad de ver comentarios que aclaran aspectos de la documentación o
corrigen cualquier errata o problema que haya surgido después de publicar la versión de
software. LiveDocs no es el lugar apropiado para solicitar ayuda como formular preguntas
sobre código que no funciona, realizar comentarios sobre problemas con el software y la
instalación o preguntar cómo crear algo con Flash. Este sitio es para ofrecer comentarios sobre
la documentación (por ejemplo, si se advierte que una frase o párrafo podría aclararse mejor).
16 Introducción
Al hacer clic en el botón para añadir un comentario a LiveDocs, existen varios aspectos sobre
los tipos de comentarios que son aceptables en el sistema. Lea atentamente estas directrices, ya
que su comentario podría eliminarse del sitio Web.
Si desea realizar alguna pregunta sobre Flash, hágalo en los foros Web de Macromedia:
www.macromedia.com/go/flash_forum_es. Los foros Web constituyen el mejor lugar para
formular preguntas, ya que están supervisados por numerosos empleados de Macromedia,
voluntarios de Team Macromedia, administradores y miembros de grupos de usuarios de
Macromedia e incluso escritores técnicos.
Los ingenieros no supervisan el sistema de LiveDocs pero sí controlan la lista de Flash Wish.
Si cree que ha encontrado un error en el software o le gustaría solicitar una mejora en Flash,
rellene el formulario en www.macromedia.com/go/wish. Si informa del error o solicita una
mejora en LiveDocs, no se añadirá oficialmente a la base de datos de errores. Debe utilizar el
formulario específico (wishform) si desea que un ingeniero considere el error o la solicitud.
No olvide tener cuidado con los caracteres especiales y los saltos de línea al pegar desde la
Web, incluido desde LiveDocs. Macromedia se ha esforzado al máximo por eliminar todos los
caracteres especiales de los ejemplos de código, pero si tiene problemas al pegar código,
consulte “Copiar y pegar código” en la página 14.
Recursos adicionales 17
Los foros Web de Macromedia (http://webforums.macromedia.com) ofrecen numerosos
foros en los que formular preguntas específicas sobre Flash, sus aplicaciones o el lenguaje
ActionScript. Los foros están supervisados por voluntarios de Team Macromedia y es visitado
con frecuencia por empleados de Macromedia. Si no está seguro de adónde acudir o cómo
resolver un problema, visite un foro de Flash.
El sitio Web Comunidad de Macromedia (www.macromedia.com/community) suele
albergar Macrochats, una serie de presentaciones en directo sobre diversos temas realizadas por
empleados de Macromedia y miembros de la comunidad. Consulte con frecuencia el sitio
Web para obtener la información más reciente y registrarse en los macrochats.
18 Introducción
CAPÍTULO 1
Novedades de Flash 8
ActionScript
1
Macromedia Flash Basic 8 y Macromedia Flash Professional 8 proporcionan varias mejoras
que facilitan la escritura de scripts más robustos con el lenguaje ActionScript. Las nuevas
funciones, que se describen más adelante en este capítulo, incluyen nuevos elementos de
lenguaje (consulte “Elementos añadidos al lenguaje ActionScript” en la página 22),
herramientas de edición mejoradas (consulte “Cambios de edición de ActionScript” en
la página 28), cambios en el modelo de seguridad y otras mejoras relacionadas con el código
ActionScript en la herramienta de edición.
Para más información, consulte los siguientes temas:
Nuevas funciones en ActionScript 2.0 y Flash 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Cambios en el modelo de seguridad para archivos SWF instalados localmente. . 29
19
Las funciones siguientes se añadieron tanto a Flash Basic 8 como a Flash Professional 8 (a
menos que se indique lo contrario):
■ Las mejoras del editor de ActionScript permiten mostrar los caracteres ocultos en los
scripts. Para más información, consulte “Visualización de caracteres ocultos” en
la página 57.
■ Las opciones de depuración se encuentran ahora disponibles en la ventana Script, así como
el panel Acciones, para los archivos ActionScript.
■ Se ha reorganizado el directorio Configuration que incluye los archivos XML y de clases.
Consulte “Archivos de configuración que se instalan con Flash 8” en la página 69 para
obtener más detalles.
■ Puede definir una preferencia para volver a cargar archivos de script modificados mientras
trabaja en una aplicación, lo que le ayuda a evitar trabajar con versiones anteriores de
archivos de script y sobrescribir los que sean más nuevos. Para más información, consulte
“Preferencias de ActionScript” en la página 45.
■ La función de la ventana Script se encuentra disponible en Flash Basic 8 y Flash
Professional 8, lo que indica que puede crear ahora un archivo de ActionScript en cada
programa.
■ El asistente de script (similar al modo Normal en las versiones anteriores de Flash) le ayuda
a codificar sin necesidad de entender la sintaxis. Para más información sobre el asistente de
script, consulte “Asistente de script” en la página 62.
■ Puede cargar nuevos tipos de archivos de imagen en tiempo de ejecución, que incluyen
imágenes JPEG progresivas, así como archivos GIF y PNG no animados. Si carga un
archivo animado, aparece el primer fotograma de la animación.
■ Puede asignar identificadores de vinculación a los archivos de mapas de bits y de sonido
almacenados en la biblioteca, lo que significa que puede asociar imágenes al escenario o
trabajar con estos elementos en bibliotecas compartidas.
■ La caché de mapa de bits permite mejorar el rendimiento de las aplicaciones en tiempo de
ejecución al almacenar en caché una representación de mapa de bits de las instancias.
Puede utilizar código ActionScript para acceder a esta propiedad. Para más información,
consulte “Caché de mapa de bits, desplazamiento y rendimiento” en la página 513.
■ La escala de 9 divisiones permite escalar instancias de clip de película sin ampliar los trazos
que forman el contorno del clip. Puede utilizar código ActionScript para acceder a esta
función en Flash Basic 8 y Flash Professional 8, o bien en la herramienta de edición de
Flash 8. Para más información, consulte “Utilización de escala en 9 divisiones en
ActionScript” en la página 592. Para obtener información sobre el acceso a la escala de 9
divisiones en la herramienta de edición, consulte “La escala en 9 divisiones y los símbolos
de clip de película” en la página 90 en Utilización de Flash.
Los nuevos elementos de lenguaje, métodos y funciones añadidas a las clases existentes en
ActionScript incluyen:
■ La función global showRedrawRegions proporciona la capacidad al reproductor
depurador para que perfile las regiones de la pantalla que se están dibujando de nuevo (es
decir, las regiones sucias que se están actualizando). La función dispone del reproductor
que muestra lo que se ha vuelto a dibujar, pero no le permite controlar estas regiones.
■ La propiedad blendMode de la clase Button, que establece el modo de mezcla para la
instancia de botón.
■ La propiedad cacheAsBitmap de la clase Button, que permite guardar en caché el objeto
como una representación interna de mapa de bits de la instancia.
En esta descripción, un archivo SWF local debe entenderse como un archivo SWF
N OT A
En las versiones anteriores de Flash Player, los archivos SWF locales podían interactuar con
otros archivos SWF y cargar datos de otro equipo local o remoto sin establecer la
configuración de seguridad. En Flash Player 8, un archivo SWF no puede realizar conexiones
con el sistema de archivos local y la red (como Internet) en la misma aplicación sin que se haya
establecido un parámetro de seguridad. Se trata de una medida de seguridad; de este modo, un
archivo SWF no puede leer archivos del disco duro ni enviar el contenido de dichos archivos
por Internet.
Esta restricción de seguridad afecta a todo el contenido implementado localmente, tanto si es
contenido antiguo (un archivo FLA creado en una versión anterior de Flash) como creado en
Flash 8. Con Flash MX 2004 o una herramienta de edición anterior, podía probar una
aplicación de Flash que se ejecutara localmente y también acceder a Internet. En Flash Player
8, esta aplicación solicita ahora al usuario que dé su permiso para que pueda comunicarse con
Internet.
Cuando se prueba un archivo en el disco duro, hay varios pasos para determinar si el archivo
es un documento local de confianza (seguro) o un documento que potencialmente no es de
confianza (no seguro). Si crea el archivo en el entorno de edición de Flash (por ejemplo,
cuando selecciona Control > Probar película), el archivo es de confianza porque se encuentra
dentro del entorno de prueba.
En Flash Player 7 y en versiones anteriores, los archivos SWF locales tenían permisos para
acceder al sistema de archivos local y a la red. En Flash Player 8, los archivos SWF locales
tienen tres niveles de permiso:
■ Acceder al sistema de archivos local solamente (el nivel predeterminado). El archivo SWF
local puede leer desde las rutas de red de convención de nomenclatura universal (UNC) y
sistema de archivos local y no se puede comunicar con Internet.
Escritura y edición en
ActionScript 2.0
2
Al escribir código ActionScript en Macromedia Flash Basic 8 o Macromedia Flash
Professional 8, se utiliza el panel Acciones o la ventana Script. El panel Acciones y la ventana
Script contienen un editor de código completo (denominado editor de ActionScript) que
incluye sugerencias y consejos para el código, coloreado y aplicación de formato del código,
resaltado de sintaxis, revisión de sintaxis, depuración, números de línea, ajuste de texto y
compatibilidad con Unicode en dos vistas distintas. Para más información sobre el editor de
ActionScript, consulte “Utilización del panel Acciones y la ventana Script” en la página 36.
Puede utilizar uno de dos métodos existentes para escribir código ActionScript en Flash.
Puede escribir scripts que forman parte del documento de Flash (es decir, scripts incorporados
en el archivo FLA), o bien escribir scripts externos (scripts o clases almacenados en archivos
externos). Sin embargo, no puede utilizar el panel Acciones para escribir scripts externos.
Al escribir scripts en un archivo FLA, se utiliza el editor de ActionScript del panel Acciones.
Este panel contiene el editor de ActionScript en un panel Script y herramientas para facilitar la
escritura de scripts. Entre estas herramientas, se incluye la caja de herramientas Acciones, que
le proporciona acceso rápido a los principales elementos del lenguaje ActionScript, el
navegador de scripts, que le ayuda a desplazarse por los scripts del documento, y el modo de
asistente de script, que le solicita el elemento necesario para crear scripts. Para más
información sobre el panel Acciones, consulte “Panel Acciones” en la página 37. Para más
información sobre el asistente de script, consulte “Asistente de script” en la página 62.
Cuando necesite crear un script externo, deberá utilizar la ventana Script del editor de
ActionScript para crear un nuevo archivo ActionScript. (También puede utilizar su editor de
texto favorito para crear un archivo AS externo.) En la ventana Script, el editor de
ActionScript incluye funciones de ayuda para el código, como sugerencias y colores de código
o revisión de la sintaxis, entre otras, del mismo modo que el panel Acciones. Para más
información sobre la ventana Script, consulte “Ventana Script” en la página 38.
31
Flash proporciona ayuda adicional para crear scripts a través de comportamientos. Los
comportamientos son funciones predefinidas de ActionScript que puede asociar a los objetos
del documento de Flash y que evitan que tenga que crear el código ActionScript
manualmente. Para más información sobre comportamientos, consulte “Comportamientos”
en la página 65.
Para más información sobre el control de eventos, consulte las secciones siguientes:
ActionScript y eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Organización de código ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Utilización del panel Acciones y la ventana Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Panel Acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Ventana Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Codificación en el panel Acciones y la ventana Script . . . . . . . . . . . . . . . . . . . . . . . . . 40
Funciones del panel Acciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Comportamientos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Configuración de publicación de ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
ActionScript y eventos
En Macromedia Flash Basic 8 y Macromedia Flash Professional 8, el código ActionScript se
ejecuta cuando se produce un evento: por ejemplo, cuando se carga un clip de película,
cuando se entra en un fotograma clave de la línea de tiempo o cuando el usuario hace clic en
un botón. Los eventos puede accionarlos el usuario o el sistema. Los usuarios hacen clic en
botones y presionan teclas; el sistema acciona eventos cuando se cumplen condiciones
específicas o finalizan procesos (se carga el archivo SWF, la línea de tiempo llega a un
determinado fotograma, termina de cargarse un gráfico, etc.).
Deberá escribir un controlador de evento que responda con una acción cuando tenga lugar el
evento. Comprender cuándo y dónde tienen lugar los eventos le ayudará a determinar cómo y
dónde deberá responder al evento con una acción y qué herramientas de ActionScript utilizará
en cada caso. Para más información, consulte “Escritura de scripts para controlar eventos” en
la página 35.
Los eventos pueden agruparse en varias categorías: eventos de ratón y de teclado, que tienen
lugar cuando un usuario interactúa con la aplicación Flash a través del ratón y el teclado;
eventos de clip, que se producen en los clips de película y los eventos de fotograma, que tienen
lugar en los fotogramas de la línea de tiempo.
Para obtener información sobre los tipos de scripts que puede escribir para controlar eventos,
consulte “Escritura de scripts para controlar eventos” en la página 35.
Eventos de clip
Dentro de un clip de película, puede reaccionar a una serie de eventos de clip que se
desencadenan cuando el usuario entra o sale de la escena o interactúa con la misma mediante
el ratón o el teclado. Por ejemplo, podría cargar un archivo SWF o de imagen JPG externo en
el clip de película cuando el usuario entrase en la escena o permitir que los movimientos del
ratón del usuario cambiasen de posición los elementos de la escena.
Eventos de fotograma
En una línea de tiempo principal o de clip de película, un evento de sistema tiene lugar
cuando la cabeza lectora entra en un fotograma clave (esto se conoce como evento de
fotograma). Los eventos de fotograma son útiles para desencadenar acciones en función del
paso del tiempo (el avance por la línea de tiempo) o para interactuar con elementos que
actualmente están visibles en el escenario. Al añadir un script a un fotograma clave, el script se
ejecuta cuando se llega al fotograma clave durante la reproducción. Un script asociado a un
fotograma se denomina script de fotograma.
Uno de los usos más habituales de los scripts de fotograma es para detener la reproducción
cuando se alcanza un determinado fotograma clave. Esto se consigue mediante la función
stop(). Se selecciona un fotograma clave y luego se añade la función stop() como elemento
de script en el panel Acciones.
Una vez que haya detenido el archivo SWF en un determinado fotograma clave, deberá
realizar alguna acción. Por ejemplo, podría utilizar un script de fotograma para actualizar
dinámicamente el valor de una etiqueta, para gestionar la interacción de los elementos del
escenario, etc.
ActionScript y eventos 33
Organización de código ActionScript
Puede asociar scripts a fotogramas clave y a instancias de objetos (clips de película, botones y
otros símbolos). Sin embargo, si dispersa el código ActionScript entre muchos fotogramas
clave e instancias de objetos, la depuración de la aplicación resultará mucho más compleja.
Además, resultará imposible que varias aplicaciones de Flash compartan el mismo código.
Por consiguiente, es importante seguir las recomendaciones de codificación al crear código
ActionScript en Flash.
En lugar de asociar los scripts a elementos como fotogramas clave, clips de película y botones,
debe responder a los eventos llamando a funciones que residan en una ubicación central. Uno
de los métodos consiste en adjuntar código ActionScript incorporado al primer o al segundo
fotograma de la línea de tiempo cuando sea posible, de manera que no tenga que buscar por
todo el archivo FLA para localizar todo el código. Otra práctica habitual consiste en crear una
capa llamada actions y colocar el código ActionScript en ella.
Al asociar todos los scripts a elementos individuales, está incorporando todo el código en el
archivo FLA. Si es importante que el código puedan compartirlo otras aplicaciones de Flash,
utilice la ventana Script o su editor de texto preferido para crear un archivo ActionScript (AS)
externo.
Al crear un archivo externo, consigue que el código sea más modular y esté mejor organizado.
Conforme crezca el proyecto, observará cómo este enfoque resulta mucho más útil de lo que
en un principio pudiera imaginar. Un archivo externo facilita la depuración y el control del
código fuente si trabaja en un proyecto con otros desarrolladores.
Para utilizar el código ActionScript contenido en un archivo AS externo, deberá crear un
script dentro del archivo FLA y luego utilizar la sentencia #include para acceder al código
que ha guardado externamente, como se muestra en el ejemplo siguiente:
#include "../core/Functions.as"
Caja de herramientas Acciones Se utiliza para examinar una lista de elementos del
lenguaje ActionScript ordenados por categorías (funciones, clases, tipos, etc.) y luego
insertarlos en el panel Script. Para insertar un elemento de script en el panel Script, haga
doble clic en él o arrástrelo directamente al panel Script. También puede añadir elementos
del lenguaje a los scripts mediante el botón Añadir (+) de la barra de herramientas del
panel Acciones. Para más información, consulte “Barras de herramientas del panel
Acciones y la ventana Script” en la página 41.
Navegador de scripts Muestra una lista jerárquica de elementos de Flash (clips de
película, fotogramas y botones) que contienen scripts. Utilice el navegador de scripts para
desplazarse rápidamente por todos los scripts del documento de Flash.
Si hace clic en un elemento del navegador de scripts, el script asociado con ese elemento
aparecerá en el panel Script y la cabeza lectora se desplazará a esa posición en la línea de
tiempo. Si hace doble clic en un elemento del navegador de scripts, el script quedará fijado
(bloqueado en su sitio). Para más información, consulte “Fijación de scripts en el panel
Acciones” en la página 63.
Panel Acciones 37
Panel Script En este panel es donde se escribe el código. El panel Script ofrece
herramientas para crear scripts en un editor completo (denominado editor de ActionScript)
que incluye aplicación de formato y revisión de la sintaxis del código, sugerencias o
consejos sobre códigos, colores para el código y otras funciones que simplifican la creación
de scripts. Para más información, consulte “Utilización del panel Acciones y la ventana
Script” en la página 36.
Para obtener información sobre cada uno de los botones de la barra de herramientas del
panel Acciones, consulte “Codificación en el panel Acciones y la ventana Script” en
la página 40. Para más información sobre las funciones del panel Acciones, consulte los
temas siguientes:
■ “Barras de herramientas del panel Acciones y la ventana Script” en la página 41
■ “Opciones de edición de ActionScript” en la página 43
■ “Sugerencias o consejos sobre códigos en Flash” en la página 47
■ “Aplicación de formato al código” en la página 53
■ “Utilización del resaltado de sintaxis” en la página 55
■ “Utilización de números de línea y ajuste de texto” en la página 56
■ “Utilización de las teclas de método abreviado de Esc” en la página 56
■ “Visualización de caracteres ocultos” en la página 57
■ “Utilización de la herramienta Buscar” en la página 58
■ “Comprobación de la sintaxis y la puntuación” en la página 59
■ “Importación y exportación de scripts” en la página 60
Ventana Script
Puede escribir y editar código ActionScript en la ventana Script al crear un nuevo archivo
ActionScript, Flash Communication o Flash JavaScript. La ventana Script se utiliza para
escribir y editar archivos de script externos e incluye color para la sintaxis, sugerencias o
consejos sobre códigos y otras opciones del editor.
En la ventana Script, puede crear código ActionScript externo, comunicación de ActionScript
y archivos JavaScript de Flash. En función del tipo de archivo de script externo que cree, la
caja de herramientas Acciones ofrece la lista completa de elementos del lenguaje disponibles
para cada uno de ellos.
Al utilizar la ventana Script, observará que algunas de las funciones de ayuda para el código,
como el navegador de scripts, el asistente de script y los comportamientos, no están
disponibles. Esto se debe a que estas funciones sólo son útiles en el contexto de creación de un
documento de Flash, no al crear un archivo de script externo.
Ventana Script 39
Codificación en el panel Acciones y la
ventana Script
El panel Script, donde se edita el código, es el elemento principal tanto del panel Acciones
como de la ventana Script. El panel Acciones y la ventana Script ofrecen funciones básicas de
edición de scripts y de ayuda para el código, como sugerencias o consejos sobre códigos,
coloreado, aplicación de formato automático, etc.
Se puede acceder a las funciones que ayudan a editar código desde la barra de herramientas del
panel Acciones o la ventana Script, a través del sistema de menús y en el propio panel
Acciones.
En los siguientes temas se presentan las numerosas funciones que ofrece el editor de
ActionScript (panel Acciones y ventana Script):
■ “Barras de herramientas del panel Acciones y la ventana Script” en la página 41
■ “Opciones de edición de ActionScript” en la página 43
■ “Preferencias de ActionScript” en la página 45
■ “Sugerencias o consejos sobre códigos en Flash” en la página 47
■ “Aplicación de formato al código” en la página 53
■ “Utilización del resaltado de sintaxis” en la página 55
■ “Utilización de números de línea y ajuste de texto” en la página 56
■ “Utilización de las teclas de método abreviado de Esc” en la página 56
■ “Visualización de caracteres ocultos” en la página 57
■ “Utilización de la herramienta Buscar” en la página 58
■ “Comprobación de la sintaxis y la puntuación” en la página 59
■ “Importación y exportación de scripts” en la página 60
Para obtener información sólo de las funciones del panel Acciones, como la fijación de script y
el navegador de script, consulte “Funciones del panel Acciones” en la página 62.
Las funciones de la barra de herramientas se describen con detalle en “Utilización del panel
Acciones y la ventana Script” en la página 36. A continuación, se ofrece un resumen rápido de
los botones que encontrará en las barras de herramientas tanto del panel Acciones como de la
ventana Script.
Añadir un nuevo elemento al script Muestra todos los elementos del lenguaje que
también se encuentran en la caja de herramientas de ActionScript. Al elegir un elemento
de la lista de categorías de elementos del lenguaje, éste se añade al script.
Buscar Busca y reemplaza texto del código ActionScript. Para más información,
consulte “Utilización de la herramienta Buscar” en la página 58.
Insertar una ruta de destino Sólo panel Acciones. Le ayuda a la hora de establecer una
ruta de destino absoluta o relativa para una acción del script. Para más información,
consulte “Inserción de rutas de destino” en la página 65.
Revisar sintaxis Comprueba los errores de sintaxis existentes en el script actual. Los
errores de sintaxis se muestran en el panel Salida. Para más información, consulte
“Comprobación de la sintaxis y la puntuación” en la página 59.
Las sugerencias para el código están activadas automáticamente para clases nativas
NO T A
que no requieren que se cree y asigne un nombre a una instancia de la clase, como Math,
Key, Mouse, etc.
Para asegurarse de que estén activados las sugerencias para el código, la opción Sugerencias
para el código debe estar seleccionada en el cuadro de diálogo Preferencias de ActionScript.
Para más información, consulte “Panel Acciones” en la página 37.
3. Para cerrar la sugerencia para el código, utilice uno de los procedimientos siguientes:
■ Escriba un paréntesis de cierre [)].
■ Haga clic fuera de la sentencia.
■ Presione Esc.
2. Para desplazarse por las sugerencias para el código, utilice las teclas de flecha arriba y flecha
abajo.
3. Para seleccionar un elemento del menú, presione Intro o el tabulador, o haga doble clic en
el elemento.
4. Para cerrar la sugerencia para el código, utilice uno de los procedimientos siguientes:
■ Seleccione uno de los elementos del menú.
■ Haga clic por encima o por debajo de la ventana de menú.
■ Escriba un paréntesis de cierre [)] si ya ha utilizado un paréntesis de apertura [(].
■ Presione Esc.
En cuanto escriba el punto (.), Flash mostrará una lista de métodos y propiedades disponibles
para los objetos Array en un menú emergente, ya que ha definido la variable como una matriz.
Para más información sobre la escritura de datos, consulte “Asignación de tipos de datos y
“strict data typing”” en la página 337. Para más información sobre cómo utilizar las
sugerencias para el código cuando aparecen, consulte “Utilización de las sugerencias para el
código” en la página 48.
Camera _cam
Color _color
ContextMenu _cm
ContextMenuItem _cmi
Date _date
Error _err
LoadVars _lv
LocalConnection _lc
Microphone _mic
MovieClip _mc
MovieClipLoader _mcl
PrintJob _pj
NetConnection _nc
NetStream _ns
SharedObject _so
Sound _sound
String _str
TextField _txt
TextFormat _fmt
Video _video
XMLNode _xmlnode
XMLSocket _xmlsocket
Para más información sobre cómo utilizar las sugerencias para el código cuando aparecen,
consulte “Utilización de las sugerencias para el código” en la página 48.
No obstante, Macromedia recomienda que, en lugar de esta técnica, se utilice “strict data
typing” (consulte “Strict typing de objetos para activar las sugerencias para el código” en
la página 51) o sufijos (consulte “Utilización de sufijos para activar las sugerencias para el
código” en la página 51), ya que dichas técnicas activan automáticamente las sugerencias para
el código y hacen que el código sea más comprensible. Para más información sobre el uso de
sugerencias para el código, consulte “Utilización de las sugerencias para el código” en
la página 48.
Estos métodos abreviados son diferentes de los métodos abreviados de teclado que
N OT A
Por ejemplo, si trabaja en el panel Script y presiona Esc+d+o, se añade el siguiente código al
script:
do {
} while ();
El punto de inserción se coloca justo después de la palabra while, donde puede comenzar a
escribir su condición. Del mismo modo, si presiona Esc+c+h, se añade el siguiente código al
script y el punto de inserción se coloca entre los paréntesis [()], donde puede empezar a
escribir la condición:
catch () {
}
espacio de un solo .
byte
tabulador >>
salto de línea
ventana Script, la ruta de clases global afecta a este proceso. Algunas veces
generará errores (aunque la ruta de clases global esté correctamente configurada)
porque el compilador no tiene constancia de que se esté compilando esta clase.
Para más información sobre la compilación de clases, consulte “Compilación y
exportación de clases” en la página 253.
comando Probar película (consulte “Depuración de los scripts” en la página 754) dará
un error si una parte cualquiera de la ruta del archivo SWF incluye caracteres que no
pueden representarse mediante el esquema de codificación MBCS (Juegos de
caracteres multibyte, Multibyte Character Sets). Por ejemplo, las rutas en japonés, que
funcionan en un sistema en lengua japonesa, no funcionan en un sistema en inglés. Esta
limitación se aplica a todas las áreas de la aplicación que utilizan el reproductor externo.
Asistente de script
El Asistente de script le solicita la introducción de los elementos de un script, lo que le ayuda
a añadir interactividad sencilla al archivo SWF o aplicación de Flash con mayor facilidad. El
modo de asistente de script es idóneo para usuarios que no tengan soltura escribiendo scripts o
que simplemente prefieran la comodidad que ofrece esta herramienta.
Al utilizarlo conjuntamente con el panel Acciones, el Asistente de script le pide que seleccione
opciones y que introduzca parámetros. Por ejemplo, en lugar de escribir un nuevo script,
puede seleccionar un elemento del lenguaje de la caja de herramientas de Acciones (o el
comando Añadir (+) de la barra de herramientas), arrastrarlo al panel Script y, seguidamente,
utilizar el Asistente de script para que le ayude a completar el script.
Si el contenido que muestra el panel Script no cambia de acuerdo con la ubicación que
S UG E R E NC I A
Comportamientos
Los comportamientos son funciones predefinidas de ActionScript que puede asociar a los
objetos del documento de Flash y que evitan que tenga que crear el código ActionScript
manualmente. Los comportamientos ofrecen funcionalidad de ActionScript escrita
previamente, como la navegación entre fotogramas, la carga de archivos SWF y JPEG
externos, el control del orden de apilamiento de los clips de película y la función de arrastre de
clips de película.
Puede utilizar los comportamientos para que la creación de una aplicación de Flash resulte
más sencilla, como forma de evitar tener que escribir código ActionScript o, por el contrario,
aprender cómo funciona el código ActionScript en determinadas situaciones.
Comportamientos 65
Los comportamientos sólo están disponibles cuando se trabaja con un documento de Flash,
no con un archivo de script externo. Normalmente, se selecciona un objeto desencadenante en
el documento, un clip de película o un botón, se selecciona Añadir en el panel
Comportamientos y, seguidamente, se elige el comportamiento deseado, como se muestra en
el siguiente ejemplo:
Configuración de publicación de
ActionScript
Puede editar ActionScript de dos maneras. Se puede editar ActionScript incorporado en un
documento de Flash mediante el panel Acciones, o bien editar ActionScript existente en un
archivo de script independiente, externo al documento de Flash, mediante la ventana Script.
Dado que el panel Acciones y la ventana Script son básicamente dos vistas diferentes que
utiliza el mismo editor de ActionScript, la configuración y las preferencias para ActionScript
dentro de Flash afectan a ambas vistas.
La configuración de publicación del documento de Flash se edita para cambiar la versión de
ActionScript que debe utilizarse al publicar el documento. También puede establecer la ruta
de clases para el documento actual, omitiendo la ruta de clases global de ActionScript.
Para más información sobre la modificación de la configuración de publicación de
ActionScript, consulte “Modificación de la configuración de publicación de ActionScript” en
la página 67. Para más información sobre la configuración de una ruta de clases de documento
o global, consulte “Modificación de la ruta de clases” en la página 68.
de documentos). Flash utiliza esta ruta de clases para obtener acceso a clases
incorporadas. Si elimina por error esta ruta de clases, restáurela añadiendo
$(LocalData)/Classes como nueva ruta de clases.
ActionScript
71
■ Las aplicaciones desarrolladas con ActionScript 2.0 son compatibles con Flash Player 6 y
versiones posteriores.
La configuración de publicación predeterminada para los nuevos archivos creados
A T E NC I ÓN
Para más información sobre la utilización de ActionScript 2.0 para escribir programas
orientados a objetos en Flash, consulte el Capítulo 6, “Clases”, en la página 195.
Aunque Macromedia recomienda el uso de ActionScript 2.0, puede continuar utilizando la
sintaxis de ActionScript 1.0, especialmente si realiza trabajos más tradicionales de Flash, como
animaciones sencillas que no exijan interacción del usuario.
Qué es ActionScript
Las características principales de ActionScript 2.0 son las siguientes:
Modelo común de programación orientada a objetos (OOP, Object Oriented
Programming) La principal función de ActionScript 2.0 es un modelo común para crear
programas orientados a objetos. ActionScript 2.0 implementa varios nuevos conceptos y
palabras clave de programación orientada a objetos, como por ejemplo clase, interfaz y
paquetes, con los que estará familiarizado si ha programado alguna vez en código Java.
El modelo OOP que proporciona ActionScript 2.0 es una “formalización sintáctica” del
método de cadenas prototipo utilizado en versiones anteriores de Macromedia Flash para crear
objetos y establecer la herencia. Con ActionScript 2.0, puede crear clases personalizadas y
ampliar las clases incorporadas en Flash.
Strict data typing ActionScript 2.0 también permite especificar de forma explícita tipos de
datos para variables, parámetros de función y tipos de devolución de funciones. Por ejemplo,
en el siguiente código se declara una variable denominada userName de tipo String (una clase
o un tipo de datos de ActionScript incorporado).
var userName:String = "";
72 ActionScript
Al utilizar ActionScript 2.0, asegúrese de que la configuración de publicación del archivo FLA
especifica ActionScript 2.0. Ésta es la configuración predeterminada para los archivos creados
con Flash MX 2004 y Flash 8. No obstante, si abre un archivo FLA más antiguo que utiliza
ActionScript 1.0 y lo reescribe utilizando ActionScript 2.0, debe cambiar la configuración de
publicación del archivo FLA a ActionScript 2.0. Si no lo hace, el archivo FLA no se compilará
correctamente y no se generarán errores.
74 ActionScript
CAPÍTULO 4
Principios básicos de la
sintaxis y el lenguaje
4
El aprendizaje de la sintaxis y las sentencias de ActionScript es como aprender a crear frases
mediante la combinación de palabras, para luego formar párrafos enteros. ActionScript puede
resultar así de sencillo. Por ejemplo, en español, el punto indica el final de una frase; en
ActionScript, el final de una sentencia se indica mediante un punto y coma. En el lenguaje
ActionScript, puede escribir una acción stop() para detener la cabeza lectora de una
instancia de clip de película o la reproducción indefinida de un archivo SWF. O bien puede
escribir miles de líneas de código que permitan hacer funcionar a una aplicación de banca
interactiva. Como puede comprobar, ActionScript puede hacer cosas muy sencillas o muy
complejas.
En el Capítulo 10, “Datos y tipos de datos”, hemos aprendido de qué forma usa el lenguaje
ActionScript los datos y cómo puede aplicarle formato en el código. En este capítulo se
describe cómo formar sentencias en ActionScript utilizando su sintaxis. Contiene numerosos
fragmentos pequeños de código y algunos ejemplos que permiten demostrar los conceptos
básicos de este lenguaje. En posteriores capítulos se incluyen ejemplos de código más largos y
progresivamente complejos en los que se combinan y aplican los conceptos descritos en este
capítulo.
Las reglas generales descritas en esta sección son aplicables a todo el lenguaje ActionScript.
La mayoría de los términos de ActionScript también tienen sus propios requisitos; para saber
cuáles son las reglas de un término determinado, consulte la entrada correspondiente en
Referencia del lenguaje ActionScript 2.0.
La aplicación de los conceptos básicos de ActionScript de manera que se obtengan programas
elegantes puede resultar una tarea ardua para los usuarios sin experiencia en ActionScript. Para más
información sobre cómo aplicar las reglas descritas en esta sección, consulte el Capítulo 19,
“Recomendaciones y convenciones de codificación para ActionScript 2.0”, en la página 775.
75
Para más información sobre los aspectos básicos de la utilización de la sintaxis y el lenguaje
ActionScript, consulte los temas siguientes:
Sintaxis, sentencias y expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Sintaxis con puntos y rutas de destino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Signos de lenguaje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Constantes y palabras clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Sentencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
La distinción entre mayúsculas y minúsculas también afecta a las variables externas que
NO T A
se cargan en un archivo SWF, como, por ejemplo, las que se cargan con
LoadVars.load().
La distinción entre mayúsculas y minúsculas se aplica a los scripts externos, como los archivos
de clase de ActionScript 2.0, los scripts que se importan empleando el comando #include y
los scripts de un archivo FLA. Si encuentra errores de tiempo de ejecución y está exportando a
más de una versión de Flash Player, deberá revisar los archivos de script externos y los scripts
de archivos FLA para confirmar que ha utilizado las mayúsculas de forma coherente.
La distinción entre mayúsculas y minúsculas se aplica por cada archivo SWF concreto. Si una
aplicación Flash Player 8 (que distingue entre mayúsculas y minúsculas) estricta llama a un
archivo SWF de Flash Player 6 no estricto, el código ActionScript ejecutado en el archivo
SWF de Player 6 será no estricto. Por ejemplo, si utiliza loadMovie() para cargar un archivo
SWF de Flash Player 6 en un archivo SWF de Flash Player 8, el archivo SWF de la versión 6
continuará sin distinguir entre mayúsculas y minúsculas, mientras que el SWF de la versión 8
se considerará como archivo que distingue entre mayúsculas y minúsculas.
Si activa la función Color de sintaxis, los elementos del lenguaje que haya escrito con el
formato correcto de mayúsculas y minúsculas aparecen en azul de forma predeterminada.
Para más información, consulte “Palabras reservadas” en la página 104.
Este código crea un nuevo clip de película, al que asigna el nombre de instancia pic_mc.
Seguidamente, puede manipular la instancia pic_mc utilizando código, por ejemplo, cargando
una imagen en ella, como se muestra en el código anterior.
Para más información sobre la utilización de ámbitos, consulte “Ámbito y referencias” en
la página 86 y “Variables y ámbito” en la página 354.
5. Seleccione Modificar > Convertir en símbolo, elija la opción Clip de Película y luego haga
clic en Aceptar para crear el símbolo.
6. Seleccione el clip de película en el escenario y asígnele el nombre de instancia myClip en el
inspector de propiedades.
7. Inserte una capa nueva y asígnele el nombre actions.
8. Añada el siguiente código ActionScript al fotograma 1 de la capa actions:
myClip._xscale = 50;
Esta línea de código hace referencia a la instancia myClip del escenario. El código
ActionScript redimensiona la instancia con la mitad de su anchura original. Dado que el
código ActionScript está en la misma línea de tiempo que el símbolo del clip de película,
sólo tendrá que hacer referencia a la instancia utilizando el nombre de instancia. Si la
instancia estuviera en una línea de tiempo diferente o anidada dentro de otra instancia,
tendría que adaptar la correspondiente ruta de destino.
Observe que el clip que usted manipula (como, por ejemplo, nestedClip) aparece justo antes
de la acción. Observará esta tendencia en posteriores secciones.
Si las variables de velocidad o gravedad existieran con anterioridad en la instancia del clip de
película starClip, los valores anteriores se habrían sobrescrito de inmediato al establecer las
nuevas variables. Puede añadir nuevas propiedades al clip de película starClip, ya que la clase
MovieClip se definió con la palabra clave dynamic. La palabra clave dynamic especifica que los
objetos basados en la clase especificada (en este caso MovieClip) pueden añadir propiedades
dinámicas y acceder a ellas en tiempo de ejecución. Para más información sobre la sentencia
dinámica, consulte dynamic statement en Referencia del lenguaje ActionScript 2.0.
Este código carga una imagen en el clip de película rotateClip que ha creado mediante
código. Se hace referencia a la instancia rotateClip mediante código ActionScript.
7. Seleccione Control > Probar película para probar el documento.
Ahora debería de ver una imagen en el escenario que gira 50º en el sentido de las agujas del
reloj.
También puede hacer referencia o identificar partes de un archivo SWF que se cargan en un
archivo SWF base.
Puede expresar un método o propiedad para un objeto concreto (como un clip de película o
un campo de texto) siguiendo este patrón. Por ejemplo, la propiedad de un objeto sería
myClip._alpha = 50;
Puede optar por añadir la palabra clave this para lograr una mayor legibilidad y coherencia.
Para más información sobre prácticas de codificación recomendadas, consulte el Capítulo 19,
“Recomendaciones y convenciones de codificación para ActionScript 2.0”, en la página 775.
Si traza el clip de película para cualquiera de los anteriores fragmentos, observará
_level0.myClip en el panel Salida. No obstante, si tiene código ActionScript situado dentro
del clip de película myClip pero desea hacer referencia a la línea de tiempo principal, haga
referencia al clip de película principal (que es el escenario principal). Haga doble clic en un
clip de película y coloque el siguiente código ActionScript en la línea de tiempo del clip de
película:
trace("me: " + this);
trace("my parent: " + this._parent);
Esto indica que ha hecho referencia a la línea de tiempo principal. Puede utilizar parent para
crear una ruta relativa a un objeto. Por ejemplo, si el clip de película dogClip está anidado
dentro del clip de película de animación animalClip, la siguiente sentencia de la instancia
dogClip indica a animalClip que interrumpa la animación:
this._parent.stop();
Aunque omita el carácter de punto y coma, el compilador de ActionScript dará por hecho que
cada línea de código representa a una sentencia independiente. No obstante, el uso del punto
y coma es una práctica recomendable en la creación de scripts porque permite lograr una
mejor legibilidad del código. Al hacer clic en el botón Formato automático del panel Acciones
o la ventana Script, se añaden puntos y comas finales al terminar la sentencia de manera
predeterminada.
El uso del punto y coma para terminar una sentencia le permite colocar más de una
N OT A
sentencia en una misma línea, pero, al hacerlo, normalmente el código resulta más difícil
de leer.
Los dos puntos (:) se utilizan en el código para asignar tipos de datos a las variables. Para
asignar un tipo de datos específico a un elemento, especifique el tipo con la palabra clave var
y la sintaxis de signo de dos puntos posterior, como se muestra en el siguiente ejemplo:
// "strict typing" de variable u objeto
var myNum:Number = 7;
var myDate:Date = new Date();
// "strict typing" de los parámetros
function welcome(firstName:String, myAge:Number) {
}
// "strict typing" de los parámetros y del valor devuelto
function square(num:Number):Number {
var squared:Number = num * num;
return squared;
}
Puede declarar el tipo de datos de objetos basándose en clases incorporadas (Button, Date,
MovieClip, etc.) y en las clases e interfaces que haya creado. En el siguiente fragmento, se crea
un nuevo objeto del tipo personalizado Student:
var firstStudent:Student = new Student();
También puede especificar que los objetos sean del tipo de datos Function o Void. Para más
información sobre la asignación de tipos de datos, consulte el Capítulo 10, “Datos y tipos de
datos”, en la página 327.
Llaves
Las llaves ({}) permiten agrupar eventos, definiciones de clases y funciones de ActionScript en
bloques. La llave inicial se coloca en la misma línea que la declaración.
También puede colocar la llave inicial en la línea que sigue a la declaración. Las
N OT A
Signos de lenguaje 89
Coloque llaves alrededor de las sentencias cuando formen parte de una estructura de control
(como, por ejemplo, if..else o for), aunque contengan una sola sentencia. Esta práctica
recomendada le ayuda a evitar errores en el código ActionScript cuando se olvida de añadir
llaves al código. En el siguiente ejemplo se muestra código escrito con un formato insuficiente:
var numUsers:Number;
if (numUsers == 0)
trace("no users found.");
Aunque este código es válido, se considera que su formato es insuficiente porque las sentencias
no aparecen entre llaves.
En este caso, si añade una segunda sentencia después de la sentencia trace, la segunda
sentencia se ejecutará independientemente de que la variable numUsers sea igual a 0, lo que
puede provocar resultados inesperados. Por este motivo, añada llaves al código como se
muestra en el siguiente ejemplo:
var numUsers:Number;
if (numUsers == 0) {
trace("no users found");
}
En el siguiente ejemplo se muestra un archivo de clase sencillo que podría utilizarse para crear
un objeto Student. Encontrará más información sobre archivos de clases en el Capítulo 6,
“Clases”, en la página 195.
Signos de lenguaje 91
Para utilizar llaves con funciones:
1. Seleccione Archivo > Nuevo y seleccione Documento de Flash para crear un nuevo archivo
FLA.
2. Seleccione Archivo > Guardar como y asigne al nuevo archivo el nombre checkform.fla.
3. Arrastre una instancia del componente Label del panel Componentes al escenario.
4. Abra el inspector de propiedades (Ventana > Propiedades > Propiedades) y, con la instancia
del componente Label seleccionada, escriba el nombre de instancia status_lbl en el cuadro
de texto Nombre de instancia.
5. Escriba 200 en el cuadro de texto An (anchura) para cambiar el tamaño del componente
de forma que tenga una anchura de 200 píxeles.
6. Arrastre una instancia del componente TextInput al escenario y asígnele el nombre de
instancia firstName_ti.
7. Arrastre una instancia del componente Button al escenario y asígnele el nombre de
instancia submit_button.
8. Seleccione el fotograma 1 de la línea de tiempo y añada el siguiente código ActionScript al
panel Acciones:
function checkForm():Boolean {
status_lbl.text = "";
if (firstName_ti.text.length == 0) {
status_lbl.text = "Please enter a first name.";
return false;
}
return true;
}
function clickListener(evt_obj:Object):Void {
var success:Boolean = checkForm();
};
submit_button.addEventListener("click", clickListener);
También puede utilizar llaves vacías como métodos abreviados de sintaxis para la función new
Object(). Por ejemplo, el código siguiente crea una instancia Object vacía:
var myObject:Object = {};
Recuerde que debe asegurarse de que cada llave inicial cuente con su correspondiente
S UG E R E N CI A
llave final.
Paréntesis
Al definir una función mediante ActionScript, los parámetros se colocan entre paréntesis [()],
como se muestra en las siguientes líneas de código:
function myFunction(myName:String, myAge:Number, happy:Boolean):Void {
// El código se escribe aquí.
}
Al llamar a una función, los parámetros que se desee pasar a ésta también se incluyen entre
paréntesis, como se muestra en el siguiente ejemplo:
myFunction("Carl", 78, true);
Puede utilizar paréntesis para modificar el orden de precedencia de ActionScript o para hacer
más legibles las sentencias de ActionScript. Esto significa que puede cambiar el orden en que
se calculan los valores escribiendo entre corchetes determinados valores, como se muestra en el
siguiente ejemplo:
var computedValue:Number = (circleClip._x + 20) * 0.8;
Signos de lenguaje 93
Debido al orden de precedencia, si no ha utilizado paréntesis o utiliza dos sentencias
independientes, la multiplicación se calculará en primer lugar, lo que significa que la primera
operación será 20 * 0.8. El resultado, 16, se sumaría a continuación al valor actual de
circleClip._x y, finalmente, se asignaría a la variable computedValue.
Si no utiliza paréntesis, deberá añadir una sentencia para evaluar la expresión, como se
muestra en el siguiente ejemplo:
var tempValue:Number = circleClip._x + 20;
var computedValue:Number = tempValue * 0.8;
Al igual que en el caso de los corchetes y las llaves, debe asegurarse de que cada paréntesis
inicial cuenta con su correspondiente paréntesis final.
Literales
Un literal es un valor que aparece directamente en el código. Los literales son valores
constantes (que no cambian) contenidos en los documentos de Flash. Ejemplos de literales
son true, false, 0, 1, 52 o incluso la cadena “foo”.
Todos los ejemplos siguientes son literales:
17
"hello"
-3
9.4
null
undefined
true
false
Los literales también pueden agruparse para formar literales compuestos. Los literales de
matrices se escriben entre corchetes ([]) y utilizan la coma (,) para separar los elementos de la
matriz. Un literal de matriz puede utilizarse para inicializar una matriz. En los siguientes
ejemplos se muestran dos matrices que se inicializan mediante literales de matriz. Puede
utilizar la sentencia new y pasar el literal compuesto como parámetro al constructor de la clase
Array, pero no puede asignar valores literales directamente al crear instancias de clases
incorporadas en ActionScript.
// se utiliza una nueva sentencia
var myStrings:Array = new Array("alpha", "beta", "gamma");
var myNums:Array = new Array(1, 2, 3, 5, 8);
Utilice literales de cadena a no ser que necesite utilizar un objeto String específicamente para
lograr un mejor rendimiento. Para más información sobre cadenas, consulte “Cadenas y la
clase String” en la página 480.
Comentarios
Los comentarios son una forma de realizar anotaciones en el código con descripciones en
lenguaje sencillo que el compilador no evalúa. Puede utilizar comentarios dentro del código
para describir qué hace el código o qué datos se devuelven al documento. La utilización de
comentarios puede ayudarle a recordar decisiones importantes de codificación y puede ser de
gran ayuda para otras personas que lean el código. Los comentarios deben explicar claramente
el propósito del código y no simplemente traducirlo. Si alguna parte del código no queda
suficientemente clara, debería añadir comentarios.
Es muy aconsejable añadir notas a los scripts utilizando comentarios. Los comentarios documentan
las decisiones que se toman con respecto al código y responden a las preguntas cómo y por qué.
Hacen que el código ActionScript resulte más comprensible. Por ejemplo, podría describir una
solución en los comentarios. De esta forma, usted u otro desarrollador podría localizar fácilmente
partes del código para resolver errores o llevar a cabo actualizaciones. O si el problema se resuelve o
se produce una mejora en una futura versión de Flash o Flash Player, podría mejorar el código
ActionScript eliminando la solución implementada.
Signos de lenguaje 95
Evite utilizar comentarios saturados. Un ejemplo de comentario saturado sería el uso de una
línea de signos igual (=) o asteriscos (*) para crear un bloque de separación alrededor de los
comentarios. En lugar de eso, utilice un espacio en blanco para separar los comentarios del
código ActionScript. Si aplica formato al código ActionScript mediante el botón Formato
automático del panel Acciones o la ventana Script, se elimina el espacio en blanco. No olvide
volver a añadir espacio en blanco al código o utilizar líneas de comentario sencillas (//) para
mantener el espaciado; estas líneas resultan más fáciles de eliminar después de aplicar formato
al código que determinar el lugar en el que previamente se encontraba el espacio en blanco.
Antes de desplegar el proyecto, elimine los comentarios superfluos del código, como “definir
las variables x e y” u otros comentarios que resulten obvios de manera inmediata para otros
desarrolladores. Si observa que hay demasiados comentarios sobrantes en el código
ActionScript, piense si necesita volver a escribir parte del código. Si necesita incluir muchos
comentarios sobre el funcionamiento del código, ello será indicativo de que el código
ActionScript no es ni elegante ni intuitivo.
Si activa la aplicación de color de sintaxis, los comentarios aparecen en gris de forma
predeterminada. Los comentarios pueden tener cualquier longitud sin que ello afecte al
tamaño del archivo exportado y no es necesario que sigan las reglas de las palabras clave y de la
sintaxis de ActionScript.
Los comentarios de una sola línea suelen utilizarse para explicar un pequeño fragmento de
código. Puede utilizar comentarios de una sola línea para los comentarios breves que quepan
en una línea. El siguiente ejemplo contiene un comentario de una sola línea:
while (condition) {
// gestionar condición con sentencias
}
Si coloca los caracteres de comentario (/* y */) en líneas separadas al principio y al final
S UG E R E N CI A
del comentario, puede anularlos fácilmente colocando dos barras diagonales (//) delante
de ellos (por ejemplo, ///* y //*/). De esta manera, puede añadir comentarios al código y
anularlos de forma rápida y sencilla.
Signos de lenguaje 97
Es recomendable colocar una línea en blanco delante de un comentario en bloque.
S UG E R E N CI A
Comentarios finales
Los comentarios finales permiten añadir un comentario en la misma línea que el código.
Estos comentarios aparecen en la misma línea que el código ActionScript. Los desarrolladores
utilizan habitualmente los comentarios finales para indicar cuál es el contenido de una
variable o para describir o llamar la atención sobre el valor devuelto por una línea de código
ActionScript. Aplique formato a los comentarios finales de la siguiente forma:
var myAge:Number = 26; // variable de mi edad
trace(myAge); // 26
Inserte los comentarios a la derecha y con espacios para que los lectores puedan distinguirlos
del código. Si es posible, intente alinear los comentarios, tal y como se muestra en el código
siguiente.
var myAge:Number = 28; // mi edad
var myCountry:String = "Canada"; // mi país
var myCoffee:String = "Hortons"; // mi café preferido
Si utiliza el formato automático (haga clic en el botón Formato automático del panel
Acciones), los comentarios finales se desplazarán a la siguiente línea. Añada estos comentarios
después de aplicar formato al código pues, de lo contrario, deberá modificar su ubicación tras
utilizar el botón Formato automático.
No incluya comentarios que no estén directamente relacionados con la clase que se está
S UG E R E N CI A
También puede incluir comentarios de una sola línea, comentarios en bloque y comentarios
finales en los archivos de clases. Hallará más información acerca de estos tipos de comentarios
en las secciones siguientes:
■ “Comentarios de una sola línea” en la página 96
■ “Comentarios de varias líneas” en la página 97
■ “Comentarios finales” en la página 98
Signos de lenguaje 99
Constantes y palabras clave
Las constantes y las palabras clave constituyen la base de la sintaxis de ActionScript. Las
constantes son propiedades con un valor fijo que no puede alterarse, por lo que son valores
que no cambian en ninguna parte de una aplicación.
Flash incluye diversas constantes predefinidas que contribuyen a simplificar el desarrollo de
aplicaciones. Un ejemplo de constantes lo podemos encontrar en la clase Key, que incluye
numerosas propiedades, como Key.ENTER o Key.PGDN. Si basa su trabajo en constantes, no
tendrá que recordar nunca que los valores de código de las teclas Intro y AvPág son 13 y 34. La
utilización de valores constantes no hace que el desarrollo o la depuración resulten más
sencillos, pero sí permite a otros desarrolladores leer el código con mayor facilidad.
Las palabras clave de ActionScript se utilizan para realizar tipos de acciones específicos.
También son palabras reservadas por este motivo, de modo que no se pueden utilizar como
identificadores (por ejemplo, nombres de variables, de funciones o de etiquetas). Ejemplos de
palabras reservadas son: if, else, this, function y return.
Para más información sobre constantes y palabras clave, consulte los siguientes temas:
■ “Utilización de constantes” en la página 100
■ “Palabras clave” en la página 103
■ “Palabras reservadas” en la página 104
Para más información sobre objetos y propiedades, consulte “Tipo de datos Object (objeto)”
en la página 335. Para obtener una lista de constantes del lenguaje (por ejemplo, false y
NaN), consulte la categoría Constantes >de Elementos del lenguaje ActionScript en Referencia
del lenguaje ActionScript 2.0.
Utilización de constantes
Las constantes son propiedades con un valor fijo que no puede alterarse; dicho de otro modo,
son valores que no cambian en ninguna parte de una aplicación. El lenguaje ActionScript
contiene numerosas constantes predefinidas. Por ejemplo, las constantes BACKSPACE, ENTER,
SPACE y TAB son propiedades de la clase Key y se refieren a las teclas del teclado. La constante
Key.TAB siempre tiene el mismo significado: indica la tecla Tabulador de un teclado. Las
constantes resultan útiles para comparar valores y utilizar en la aplicación valores que no
cambian.
Para que funcione el anterior código ActionScript, puede que sea necesario desactivar los
métodos abreviados de teclado en el entorno de edición. Seleccione Control > Probar película
del menú principal y, seguidamente, mientras previsualiza el archivo SWF en el reproductor,
seleccione Control > Deshabilitar métodos abreviados de teclado de la ventana de vista previa
del archivo SWF.
En Flash, no existe ninguna forma de crear sus propios valores constantes, salvo si se crea
clases personalizadas con variables de miembros privadas. No puede crear una variable de “sólo
lectura” en Flash.
Las variables deben escribirse en minúsculas o mezclando mayúsculas y minúsculas; sin
embargo, las constantes (variables que no cambian) deberían escribirse en mayúsculas. Separe
las palabras con caracteres de subrayado, tal y como se muestra en el siguiente código
ActionScript:
var BASE_URL:String = "http://www.macromedia.com"; //constante
var MAX_WIDTH:Number = 10; //constante
Escriba las constantes estáticas en mayúsculas y separe las palabras con un carácter de
subrayado. No programe directamente las constantes numéricas, a menos que la constante sea
1, 0 o -1, que es la constante que utilizaría en un bucle for como valor de contador.
Puede utilizar las constantes en situaciones en las que es necesario referirse a una propiedad
cuyo valor es invariable. De esta forma será más sencillo encontrar errores tipográficos en el
código que podrían pasar inadvertidos si utilizara literales. También podrá modificar el valor
en un solo lugar. Para más información sobre el uso de literales, consulte “Literales” en
la página 94.
Por ejemplo, la definición de clase del siguiente ejemplo crea tres constantes que siguen la
convención de denominación empleada por ActionScript 2.0.
Para acceder a una propiedad que no sea estática, deberá acceder al valor a través de una
instancia de la clase. Dado que la propiedad EXAMPLE_PUBLIC es una propiedad pública,
está disponible para el código situado fuera de la definición de clase.
9. En el panel Acciones, elimine las sentencias trace que añadió en los pasos 5 y 7.
10. Introduzca el código siguiente en el panel Acciones:
var myExample:ConstExample = new ConstExample();
trace(myExample.EXAMPLE_PUBLIC); // salida: Public access
La propiedad EXAMPLE_PRIVATE es una propiedad privada, por lo que sólo está disponible
dentro de la definición de clase.
14. Seleccione Control > Probar película para probar el documento.
Verá El miembro de clase es privado y no permite el acceso en el panel Salida.
Para más información sobre clases incorporadas y la creación de clases personalizadas,
consulte el Capítulo 6, “Clases”, en la página 195.
Palabras clave
Las palabras clave son palabras que hacen algo concreto en ActionScript. Por ejemplo, la
palabra clave var se utiliza para declarar una variable. La palabra clave var se muestra en la
siguiente línea de código:
var myAge:Number = 26;
Una palabra clave es una palabra reservada que tiene un significado específico: por ejemplo, la
palabra clave class se utiliza para definir una nueva clase de ActionScript, mientras que la
palabra clave var se utiliza para declarar variables locales. Otros ejemplos de palabras
reservadas son: if, else, this, function y return.
Las palabras clave no pueden utilizarse como identificadores (como, por ejemplo, nombres de
variables, de funciones o de etiquetas), por lo que no deberá utilizarlas en ningún otro lugar de
los archivos FLA para ningún otro fin (por ejemplo, como nombres de instancias). Ya ha
utilizado en numerosas ocasiones la palabra clave var, especialmente si ha leído el Capítulo
10, “Datos y tipos de datos”, en la página 327. ActionScript reserva palabras para usarlas
específicamente en su lenguaje. Por consiguiente, no podrá utilizar las palabras clave como
identificadores (por ejemplo, nombres de variables, de funciones o de etiquetas). Encontrará
una lista de estas palabras clave en “Palabras reservadas” en la página 104.
not on onClipEvent or
En la siguiente tabla se enumeran las palabras clave que están reservadas para su uso en el
futuro por parte de ActionScript o el borrador de especificación del lenguaje ECMAScript
(ECMA-262) edición 4. También debe evitar utilizar estas palabras clave en el código:
Existen varias palabras que, aunque no son palabras reservadas, no deben utilizarse como
identificadores en el código ActionScript (por ejemplo, como nombres de variables o
instancias). Hay palabras que son utilizadas por las clases incorporadas que conforman el
lenguaje ActionScript. Por consiguiente, no debe utilizar los nombres de propiedades,
métodos, clases, interfaces, nombres de clases de componentes y valores como nombres en el
código (por ejemplo, al asignar nombre a las variables, clases o instancias).
Para conocer cuáles son estos nombres, consulte Referencia del lenguaje ActionScript 2.0 y
busque en el panel Ayuda las secciones de uso de Aprendizaje de ActionScript 2.0 en Flash.
Otro ejemplo es la sentencia return, que devuelve un resultado como valor de la función en
la que se ejecuta.
Hay muchas formas de escribir o aplicar formato a un código ActionScript. Puede que su
forma de construir la sintaxis del código ActionScript difiera de la de otros usuarios, por
ejemplo, en lo que se refiere al espaciado de las sentencias o al lugar en el que coloca llaves ({})
en el código. Aunque existen diversas formas de construir las sentencias sin romper el código,
puede seguir algunas directrices para escribir código ActionScript bien formado.
Coloque una sola sentencia por línea para aumentar la legibilidad del código
ActionScript. En el siguiente ejemplo se muestra el uso de sentencias recomendado y no
recomendado:
theNum++; // recomendado
theOtherNum++; // recomendado
aNum++; anOtherNum++; // no recomendado
Este código ActionScript incorpora una asignación dentro del código que resulta difícil de
leer. La legibilidad mejora si se asignan variables como sentencias independientes, como se
muestra en el ejemplo siguiente:
var a:Number = b + c;
var myNum:Number = a + d;
Sentencias compuestas
Una sentencia compuesta contiene numerosas sentencias que colocan entre llaves ({}).
Las sentencias situadas dentro de una sentencia compuesta pueden ser de cualquier tipo
de sentencias de ActionScript. A continuación se muestra una sentencia compuesta
típica.
Las sentencias entre llaves aparecen con sangría con respecto a la sentencia compuesta, como
se muestra en el siguiente código ActionScript:
var a:Number = 10;
var b:Number = 10;
if (a == b) {
// Este código aparece sangrado.
trace("a == b");
trace(a);
trace(b);
}
Esta sentencia compuesta contiene varias sentencias, pero actúa como una sola sentencia en el
código ActionScript. La llave de apertura se coloca al final de la sentencia compuesta. La llave
de cierre empieza una línea y se alinea con el principio de la sentencia compuesta.
Para más información sobre el uso de llaves, consulte “Llaves” en la página 89.
Condiciones
Las condiciones permiten determinar si algo es verdadero o existe y, seguidamente, repetir
opcionalmente una acción (mediante bucles) o ejecutar las acciones que se especifiquen,
como, por ejemplo, funciones o expresiones, en función de si la condición es verdadera o no lo
es. Por ejemplo, puede determinar si una determinada variable está definida o tiene un valor
concreto y ejecutar un bloque de código en función del resultado. También puede cambiar los
gráficos del documento de Flash dependiendo de la hora que marque el reloj del sistema del
usuario o del tiempo existente en el lugar actual de éste.
Para realizar una acción en función de si se da o no una condición, o para repetir una acción
(crear sentencias de bucle), puede utilizar las sentencias if, else, else if, for, while, do
while, for..in o switch.
Sentencias 107
Para más información sobre condiciones que puede utilizar y cómo escribirlas, consulte los
siguientes temas:
■ “Escritura de condiciones” en la página 108
■ “Utilización de la sentencia if ” en la página 109
■ “Utilización de la sentencia if..else” en la página 110
■ “Utilización de la sentencia if..else if ” en la página 111
■ “Utilización de una sentencia switch” en la página 112
■ “Utilización de sentencias try..catch y try..catch..finally” en la página 114
■ “El operador condicional y sintaxis alternativa” en la página 117
Escritura de condiciones
Las sentencias que comprueban si una condición es verdadera (true) o falsa (false) comienzan
con el término if. Si la condición da como resultado true, ActionScript ejecuta la siguiente
sentencia. Si el resultado de la condición es false, ActionScript salta a la siguiente sentencia
fuera del bloque de código.
probables.
Existen diversas situaciones en las que deberá utilizar sentencias if cuando trabaje en un
proyecto de Flash. Por ejemplo, si está creando un sitio con Flash que exige que los usuarios
inicien una sesión antes de acceder a determinadas secciones del sitio Web, puede utilizar una
sentencia if para validar si los usuarios han introducido texto en los campos de nombre de
usuario y contraseña.
Si necesita validar nombres de usuario y contraseñas utilizando una base de datos externa,
probablemente desee verificar que la combinación de nombre de usuario/contraseña enviada
por un usuario coincide con un registro de la base de datos. También puede comprobar si el
usuario tiene permiso para acceder a la parte del sitio especificada.
Si crea scripts de animaciones en Flash, puede que desee utilizar la sentencia if para
comprobar si una instancia del escenario continúa estando dentro de los límites de éste. Por
ejemplo, si una pelota se mueve hacia abajo a lo largo del eje vertical, puede que sea necesario
detectar cuándo la pelota entra en contacto con el borde inferior del escenario para cambiar su
dirección de forma que parezca que rebota hacia arriba.
Sentencias 109
Utilización de la sentencia if..else
La sentencia condicional if..else le permite comprobar una condición y, seguidamente,
ejecutar un bloque de código si dicha condición existe, o ejecutar un bloque de código
alternativo si dicha condición no existe.
Por ejemplo, el siguiente código comprueba si el valor de x es superior a 20 y genera una
sentencia trace() en caso afirmativo o genera una sentencia trace() diferente en caso
negativo:
if (x > 20) {
trace("x is > 20");
} else {
trace("x is <= 20");
}
Deberá utilizar un bloque if..else if en los proyectos de Flash cuando desee comprobar
una serie de condiciones. Por ejemplo, si desea mostrar una imagen diferente en la pantalla
dependiendo de la hora del día a la que se produzca la visita del usuario, puede crear una serie
de sentencias if que determinen si es por la mañana, la hora de la sobremesa, por la tarde o
por la noche. Seguidamente puede mostrar un gráfico que resulte adecuado.
El siguiente código no sólo comprueba si el valor de x es superior a 20, sino que también
comprueba si el valor de x es negativo:
if (x > 20) {
trace("x is > 20");
} else if (x < 0) {
trace("x is negative");
}
Sentencias 111
} else if (currentHour < 15) {
trace("Good afternoon");
// else..if si la hora actual es anterior a 8PM...
} else if (currentHour < 20) {
trace("Good evening");
// else en caso de que la hora actual sea de 8PM a 11:59PM
} else {
trace("Good night");
}
Sentencias 113
3. Seleccione Control > Probar película para probar el código ActionScript.
Escriba letras mediante el teclado, incluidas las teclas a, e o i. Al pulsar estas tres teclas,
observará sentencias trace en el código ActionScript anterior. La línea de código crea un
nuevo objeto que se utiliza como detector de la clase Key. Este objeto se utiliza para
notificar el evento onKeyDown() cuando el usuario pulsa una tecla. El método
Key.getAscii() devuelve el código ASCII de la última tecla que pulsa o suelta el usuario,
por lo que debe utilizar el método String.fromCharCode() para devolver una cadena
que contenga los caracteres representados por los valores ASCII de los parámetros. Dado
que “E” no tiene sentencia break, el bloque se ejecuta si el usuario pulsa las teclas e o E. Si
el usuario pulsa una tecla que no está reflejada en ninguno de los tres primeros casos, se
ejecuta el caso predeterminado (default).
El bloque finally se ejecuta aunque el bloque try finalice con una sentencia return.
N OT A
// try-catch-finally
try {
// sentencias
} catch (myError) {
// sentencias
} finally {
// sentencias
}
Sentencias 115
Para crear un error personalizado:
1. Seleccione Archivo > Nuevo y cree un archivo de ActionScript nuevo.
2. Seleccione Archivo > Guardar como y asigne al archivo el nombre
DivideByZeroException.as.
3. Escriba el siguiente código ActionScript en el panel Script:
// En DivideByZeroException.as:
class DivideByZeroException extends Error {
var message:String = "Divide By Zero error";
}
7. Guarde el documento de Flash y seleccione Control > Probar película para comprobar el
archivo en el entorno de prueba.
Dado que el valor de n2 es igual a 0, Flash emite su clase de error personalizada
DivideByZeroException y muestra Divide By Zero error en el panel Salida. Si cambia
el valor de n2 en la línea dos de 0 a -1 y vuelve a probar el documento de Flash, observará
An unknown error occurred; n2 cannot be less than zero en el panel Salida. La
configuración del valor de n2 con cualquier número mayor que 0 hace que el resultado de
la división aparezca en el panel Salida. Para más información sobre la creación de clases
personalizadas, consulte el Capítulo 6, “Clases”, en la página 195.
Mediante una expresión condicional, podría escribir el mismo código empleando este
formato:
var numOne:Number = 8;
var numTwo:Number = 0;
trace((numTwo > 0) ? numOne/numTwo : "carrot");
Como puede observar, la sintaxis abreviada reduce la legibilidad, por lo que no es la opción
preferida. Si tiene que utilizar operadores condicionales, coloque entre paréntesis la condición
inicial (antes del signo de interrogación [?]). De esta forma mejorará la legibilidad del código
ActionScript. El código siguiente es un ejemplo de código ActionScript con legibilidad
mejorada:
var numOne:Number;
(numOne >= 5) ? numOne : -numOne;
Puede escribir una sentencia condicional que devuelva un valor booleano, como se muestra en
el ejemplo siguiente:
if (cartArr.length > 0) {
return true;
} else {
return false;
}
Sin embargo, comparado con el código anterior, se prefiere el código ActionScript del
siguiente ejemplo:
return (cartArr.length > 0);
El segundo fragmento es más corto y tiene menos expresiones para evaluar. Es más fácil leerlo
y entenderlo.
Sentencias 117
Si se escriben condiciones complejas, es aconsejable agrupar las condiciones con el uso de
paréntesis [()]. Si no se utilizan paréntesis, el desarrollador u otras personas que trabajen con
el código ActionScript pueden encontrar errores de precedencia del operador. Para más
información sobre la precedencia de los operadores, consulte “Precedencia y asociatividad de
operadores” en la página 145.
Por ejemplo, en el código siguiente la condición no se escribe entre paréntesis:
if (fruit == "apple" && veggie == "leek") {}
En el código siguiente se utiliza el formato correcto, pues las condiciones se escriben entre
paréntesis:
if ((fruit == "apple") && (veggie == "leek")) {}
Loop Descripción
Bucles for Repite una acción mediante un contador incorporado.
Bucles do..while Iguales que los bucles while, con la diferencia de que la expresión se
evalúa en la parte inferior del bloque de código, con el que el bucle
siempre se ejecuta al menos una vez.
Para más información sobre la sentencia while, consulte “Utilización de bucles while” en
la página 126.
Sentencias 119
Para repetir una acción mediante un contador incorporado:
■ Utilice la sentencia for.
La mayoría de las reproducciones indefinidas utilizan algún tipo de contador para
controlar cuántas veces se ejecutan. Cada ejecución se denomina repetición. Puede declarar
una variable y escribir una sentencia que incremente o disminuya el valor de la variable
cada vez que se ejecute la reproducción. En la acción for, el contador y la sentencia que
incrementa el contador son parte de la acción.
En el ejemplo siguiente, la primera expresión (var i:Number = 4) es la expresión inicial
cuyo resultado se calcula antes de la primera repetición. La segunda expresión ( i > 0) es
la condición que se comprueba antes de que se ejecute la reproducción indefinida. La
tercera expresión (i--) se denomina expresión posterior y su resultado siempre se calcula
después de que se ejecute la reproducción.
for (var i:Number = 4; i > 0; i--) {
myClip.duplicateMovieClip("newMC" + i, i, {_x:i*20, _y:i*20});
}
Para más información sobre la sentencia for, consulte “Utilización de bucles for” en
la página 123.
Para más información sobre la sentencia for..in, consulte “Utilización de bucles for..in”
en la página 124.
Las repeticiones en Flash se ejecutan con gran rapidez en Flash Player; los bucles,
A D V E R T E NC I A
sin embargo, dependen en gran medida del procesador. Cuantas más repeticiones
tenga un bucle y más sentencias se ejecuten en cada bloque, más recursos se
consumirán del procesador. Los bucles mal escritos pueden generar problemas de
rendimiento y de estabilidad.
Para más información sobre cada sentencia, consulte las secciones correspondientes incluidas
posteriormente en este capítulo como, por ejemplo, “Utilización de bucles while” en
la página 126, así como sus respectivas entradas en Referencia del lenguaje ActionScript 2.0.
Sentencias 121
Al utilizar matrices, ya sean éstas simples o complejas, deberá tener en cuenta una condición
denominada bucle infinito. Un bucle infinito, como su propio nombre indica, es un bucle que
carece de condición de finalización. Esto provoca problemas reales: que se bloquee la
aplicación Flash, que el documento de Flash deje de responder en un navegador Web o un
comportamiento extremadamente incoherente del documento de Flash. El siguiente código es
un ejemplo de bucle infinito:
// CÓDIGO ERRÓNEO: crea un bucle infinito
// NO SE ASUMEN RESPONSABILIDADES POR SU USO.
var i:Number;
for (i = 0; i < 10; i--) {
trace(i);
}
Al utilizar bucles (y, especialmente, bucles while y do..while), asegúrese siempre de que el
bucle puede terminarse correctamente y que no se convierte en un bucle infinito.
Para más información sobre el control de bucles, consulte “Utilización de una sentencia
switch” en la página 112.
Debe proporcionar tres expresiones a una sentencia for: una variable que se establece con un
valor inicial, una sentencia condicional que determina cuándo termina la reproducción en
bucle y una expresión que cambia el valor de la variable con cada bucle. Por ejemplo, el
siguiente código realiza cinco bucles. El valor de la variable i comienza en 0 y termina en 4,
mientras que la salida son los números 0 a 4, cada uno de ellos en su propia línea.
var i:Number;
for (i = 0; i < 5; i++) {
trace(i);
}
Sentencias 123
5. Seleccione el fotograma 1 de la línea de tiempo y escriba el siguiente código ActionScript
en el panel Acciones:
var i:Number;
for (i = 0; i < 5; i++) {
this.attachMovie("libraryLinkageClassName", "clip" + i + "_mc", i,
{_x:(i * 100)});
}
6. Seleccione Control > Probar película para probar el código en Flash Player.
Observe cómo se duplican cinco clips de película a lo largo de la parte superior del
escenario. Este código ActionScript duplica el símbolo de clip de película en la biblioteca y
cambia la posición de los clips en el escenario para situarlos en las coordenadas x
correspondientes a 0, 100, 200, 300 y 400 píxeles. El bucle se ejecuta cinco veces,
asignándose a la variable i un valor entre 0 y 4. En la última repetición del bucle, el valor
de i se incrementa hasta 4 y la segunda expresión (i < 5) deja de ser verdadera (true), lo
que provoca que el bucle finalice.
Recuerde incluir un espacio después de cada expresión de una sentencia for. Para más
información, consulte for statement en la Referencia del lenguaje ActionScript 2.0.
Para más información sobre objetos y propiedades, consulte “Tipo de datos Object (objeto)”
en la página 335.
clase personalizada, a no ser que la clase sea una clase dinámica. Incluso con instancias
de clases dinámicas, sólo puede repetir las propiedades que se añadan dinámicamente.
Las llaves ({}) que se utilizan para incluir el bloque de sentencias que se ejecutan con la
N OT A
3. Seleccione Control > Probar película para probar el código en Flash Player.
Al probar el archivo SWF, debería ver el siguiente texto en el panel Salida:
myObj.name = Tara
myObj.age = 27
myObj.city = San Francisco
Si escribe un bucle for..in en un archivo de clase (un archivo de ActionScript externo), los
miembros de instancias no estarán disponibles para el bucle, pero sí los miembros estáticos. Sin
embargo, si escribe un bucle for..in en un archivo FLA para una instancia de la clase, los
miembros de instancias estarán disponibles, pero no los miembros estáticos. Para más información
sobre la escritura de archivos de clases, consulte el Capítulo 6, “Clases”, en la página 195. Para más
información, consulte for..in statement en la Referencia del lenguaje ActionScript 2.0.
Sentencias 125
Utilización de bucles while
Utilice la sentencia while para repetir una acción mientras se dé una condición; es similar a
una sentencia if que se repite mientras la condición sea true.
Un bucle while calcula el resultado de una expresión y ejecuta el código en el cuerpo del bucle
si la expresión es true. Si la condición da como resultado true, se ejecuta una sentencia o una
serie de sentencias antes de regresar para comprobar la condición de nuevo. Cuando la
condición dé como resultado false, se omitirá la sentencia o serie de sentencias y finaliza el
bucle. La utilización de bucles while puede resultar muy útil si no está seguro del número de
veces que debe repetirse el bucle de un bloque de código.
Por ejemplo, el siguiente código traza números en el panel Salida:
var i:Number = 0;
while (i < 5) {
trace(i);
i++;
}
Una desventaja que presenta el uso de los bucles while frente a los bucles for es que resulta
más probable escribir un bucle infinito con bucles while. El código de ejemplo de bucle for
no se compila si se omite la expresión que aumenta la variable counter, mientras que el
ejemplo de bucle while sí se compila si se omite dicho paso. Sin la expresión que incrementa
i, el bucle se convierte en un bucle infinito.
Para crear y utilizar un bucle while en un archivo FLA, siga este ejemplo.
Para más información, consulte while statement en la Referencia del lenguaje ActionScript
2.0.
Bucles do..while
Puede utilizar la sentencia do...while para crear el mismo tipo de reproducción que while. Sin
embargo, la expresión se calcula al final del bloque de código en un bucle do..while (se
comprueba después de que se ejecute el bloque de código), por lo que el bucle siempre se ejecuta
al menos una vez. Las sentencias sólo se ejecutan si la condición da como resultado true.
En el siguiente código se muestra un ejemplo sencillo de bucle do..while que genera un
resultado aunque la condición no se cumpla.
var i:Number = 5;
do {
trace(i);
i++;
} while (i < 5);
// Salida: 5
Cuando utilice bucles, deberá evitar escribir bucles infinitos. Si la condición de un bucle
do..while da permanentemente como resultado true, habrá creado un bucle infinito que
muestra una advertencia o provoca que Flash Player se bloquee. Utilice como alternativa un
bucle for si conoce el número de veces que debe ejecutarse el bucle. Para más información y
ejemplos de do..while statement, consulte Referencia del lenguaje ActionScript 2.0.
Sentencias 127
Utilización de bucles anidados en el código ActionScript
En el siguiente ejemplo se muestra cómo crear una matriz de objetos y mostrar los valores de
cada uno de ellos en la estructura anidada. En este ejemplo se muestra cómo utilizar el bucle
for para ejecutarlo en cada uno de los elementos de la matriz y cómo utilizar el bucle for..in
para repetir cada par clave/valor de los objetos anidados.
1
name: Two
value: 2
Usted conoce el número de elementos existentes en la matriz, por lo que puede ejecutar el
bucle por cada uno de los elementos empleando simplemente un bucle for. Dado que
cada objeto de la matriz puede tener diferentes pares nombre/valor, puede utilizar un bucle
for..in para repetir cada valor y mostrar los resultados en el panel Salida.
Una matriz es una especie de estructura para albergar datos. Una matriz es como un edificio
de oficinas, en el que cada planta contiene un tipo de datos diferente (por ejemplo, accounting
-contabilidad- en la 3ª planta y engineering -diseño- en la 5ª planta). Esto permite almacenar
diferentes tipos de datos en una sola matriz, incluidas otras matrices. Cada planta de este
edificio puede contener múltiples tipos de contenido (executives -ejecutivos- y accounting -
contabilidad- podrían compartir la 3ª planta).
Una matriz contiene elementos que equivalen a cada una de las plantas del edificio. Cada
elemento tiene una posición numérica (el índice), lo que le permite referirse a la posición de
cada elemento en la matriz. Esto es igual que asignar un número a cada planta de un edificio.
Cada elemento puede contener un dato (que podría ser un número, una cadena, un valor
booleano o incluso una matriz o un objeto) o estar vacío.
También puede controlar y modificar la propia matriz. Por ejemplo, puede trasladar el
departamento de diseño a la planta baja del edificio. Las matrices le permiten desplazar valores
y cambiar el tamaño de la matriz (por continuar con el símil, digamos que se reforma el
edificio y se añaden o eliminan plantas). Esto permite añadir o eliminar elementos y mover los
valores a elementos diferentes.
Por consiguiente, el edificio (la matriz) contiene plantas (los elementos) que están numeradas
(el índice), al tiempo que cada planta contiene uno o más departamentos (los valores).
Matrices 129
Para más información sobre la modificación de matrices, consulte “Modificación de matrices”
en la página 132. Para obtener información sobre la utilización de matrices e índices, consulte
“Utilización de matrices” en la página 130. Para obtener información sobre la adición y
eliminación de elementos, consulte “Adición y eliminación de elementos” en la página 134.
Para obtener información sobre el operador de acceso a una matriz, consulte “Utilización de
operadores de punto y de acceso a una matriz” en la página 152.
El archivo de origen de muestra, array.fla, se puede encontrar en la carpeta Samples del disco
duro. Este ejemplo ilustra la manipulación de matrices mediante ActionScript. El código del
ejemplo crea una matriz y ordena, añade y elimina elementos de dos componentes List.
Busque el archivo de muestra en los siguientes directorios:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Arrays.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Arrays.
Utilización de matrices
Puede utilizar las matrices de varias formas en su trabajo. Puede emplearlas para almacenar
listas de objetos, como, por elemento, una serie de artículos devueltos. Si carga datos de
servidores Web remotos, puede que incluso reciba datos en forma de matriz de objetos
anidados. Las matrices suelen contener datos con un formato similar. Por ejemplo, si crea
una aplicación de audio en Flash, puede que tenga una lista de reproducción de un usuario
almacenada en forma de matriz con información de canciones almacenadas en objetos.
Cada objeto contiene el nombre de la canción, el nombre del intérprete, la duración de la
canción, la ubicación de un archivo sonoro (por ejemplo, un archivo MP3) o cualquier otra
información que sea preciso asociar a un archivo concreto.
La ubicación de un elemento de una matriz se conoce como índice. Todas las matrices están
basadas en cero, lo que significa que el primer elemento de la matriz es [0], el segundo
elemento, [1], y así sucesivamente.
Existen diversos tipos de matrices que irá descubriendo en las siguientes secciones. Las matrices
suelen utilizar un índice numérico para consultar un elemento concreto de una matriz indexada.
El segundo tipo de matriz se conoce como matriz asociativa y emplea un índice de texto en lugar de
un índice numérico para consultar información. Para más información sobre matrices comunes,
consulte “Matrices” en la página 129. Para más información sobre matrices asociativas, consulte
“Creación de matrices asociativas” en la página 138. Para más información sobre matrices
multidimensionales, consulte “Creación de matrices multidimensionales” en la página 135. Para
obtener información sobre el operador de acceso a una matriz, consulte “Utilización de operadores
de punto y de acceso a una matriz” en la página 152.
En la primera línea del código ActionScript, deberá definir una nueva matriz para que
contenga los valores. Seguidamente, deberá definir datos (value0 y value1) en dos
índices de la matriz. Un bucle for..in permite repetir cada uno de los elementos de la
matriz y mostrar los pares clave/valor en el panel Salida empleando una sentencia trace.
3. Seleccione Control > Probar película para probar el código.
El panel Salida muestra este texto:
key: 0, value: value0
key: 1, value: value1
Para más información sobre bucles for..in, consulte “Utilización de bucles for..in” en
la página 124.
Para obtener información sobre cómo crear diferentes tipos de matrices, consulte las siguientes
secciones:
■ “Creación de matrices indexadas” en la página 135
■ “Creación de matrices multidimensionales” en la página 135
■ “Creación de matrices asociativas” en la página 138
Matrices 131
El archivo de origen de muestra, array.fla, se puede encontrar en la carpeta Samples del disco
duro. Este ejemplo ilustra la manipulación de matrices mediante ActionScript. El código del
ejemplo crea una matriz y ordena, añade y elimina elementos de dos componentes List.
Busque el archivo de muestra en los siguientes directorios:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Arrays.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Arrays.
Modificación de matrices
También puede controlar y modificar la matriz mediante código ActionScript. Puede mover
valores a otro lugar de la matriz o cambiar el tamaño de la matriz. Por ejemplo, si desea
intercambiar los datos contenidos en dos índices de una matriz, puede utilizar el siguiente
código:
var buildingArr:Array = new Array();
buildingArr[2] = "Accounting";
buildingArr[4] = "Engineering";
trace(buildingArr); // undefined,undefined,Accounting,undefined,Engineering
Puede que se pregunte por qué es necesario crear una variable temporal en el ejemplo anterior.
Si ha copiado el contenido del índice de matriz 4 en el índice de matriz 2 y viceversa, se
perderá el contenido original del índice de matriz 2. Al copiar el valor de uno de los índices de
matriz a una variable temporal, podrá guardar el valor y copiarlo de nuevo más tarde en el
código sin riesgo alguno. Por ejemplo, si utiliza el siguiente código en lugar del anterior,
observará que se ha perdido el valor del índice de matriz 2 (Accounting). Ahora tiene dos
equipos de diseño (engineering) pero ninguno de contabilidad (accounting).
// erróneo (no hay variable temporal)
buildingArr[2] = buildingArr[4];
buildingArr[4] = buildingArr[2];
trace(buildingArr); //
undefined,undefined,Engineering,undefined,Engineering
En el ejemplo anterior, se crea una matriz y se rellena con los nombres de los meses. Se
muestra el contenido, así como la longitud de la matriz. Un bucle for se repite sobre cada
elemento de la matriz y convierte el valor a mayúsculas, tras lo cual vuelve a mostrarse el
contenido de la matriz.
En el siguiente código ActionScript, si crea un elemento en el índice de matriz 5, la longitud
de la matriz devuelve 6 (porque la matriz está basada en cero) y no el número real de
elementos de la matriz como podría esperarse:
var myArr:Array = new Array();
myArr[5] = "five";
trace(myArr.length); // 6
trace(myArr); // undefined,undefined,undefined,undefined,undefined,five
Para más información sobre bucles for, consulte “Utilización de bucles for” en la página 123.
Para obtener información sobre el operador de acceso a una matriz, consulte “Utilización de
operadores de punto y de acceso a una matriz” en la página 152.
Matrices 133
El archivo de origen de muestra, array.fla, se puede encontrar en la carpeta Samples del disco
duro. Este ejemplo ilustra la manipulación de matrices mediante ActionScript. El código del
ejemplo crea una matriz y ordena, añade y elimina elementos de dos componentes List.
Busque el archivo de muestra en los siguientes directorios:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Arrays.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Arrays.
Aunque haya eliminado el elemento del índice de matriz 5, la longitud de la matriz continúa
siendo 12 y el elemento que había en el índice de matriz 5 se convierte en una cadena en
blanco en lugar de desaparecer por completo.
El archivo de origen de muestra, array.fla, se puede encontrar en la carpeta Samples del disco
duro. Este ejemplo ilustra la manipulación de matrices mediante ActionScript. El código del
ejemplo crea una matriz y ordena, añade y elimina elementos de dos componentes List.
Busque el archivo de muestra en los siguientes directorios:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Arrays.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Arrays.
En la primera línea del código ActionScript, deberá definir una nueva matriz para que
contenga los valores.
3. Seleccione Control > Probar película para probar el código.
El panel Salida muestra este texto:
one,two,three
En este código, se emplea el literal de matriz para definir una nueva matriz en el código.
Este código es equivalente al código ActionScript escrito en el paso 2. Al probar el código,
se ve la misma pantalla de salida en el panel Salida.
Matrices 135
Piense, por ejemplo, en una lista de tareas almacenadas en forma de matriz de cadenas
indexadas:
var tasks:Array = ["wash dishes", "take out trash"];
Si desea almacenar una lista independiente de tareas por cada día de la semana, puede crear
una matriz multidimensional con un elemento por cada día de la semana. Cada elemento
contiene una matriz indexada que almacena la lista de tareas.
Esta matriz, twoDArray, consta de dos elementos de matriz. Estos elementos son en sí
mismos matrices formadas por dos elementos. En este caso, twoDArray es la matriz
principal que contiene dos matrices anidadas.
3. Seleccione Control > Probar película para probar el código. Se ve lo siguiente en el panel
Salida.
one,two,three,four
Puede utilizar bucles for anidados para crear matrices multidimensionales. En el siguiente
ejemplo se muestra cómo hacerlo.
Este código ActionScript crea una matriz de 3 x 3 y establece el valor de cada nodo de la
matriz con su índice. Luego deberá trazar la matriz (mainArr).
3. Seleccione Control > Probar película para probar el código.
Se ve lo siguiente en el panel Salida:
[0][0],[0][1],[0][2],[1][0],[1][1],[1][2],[2][0],[2][1],[2][2]
También puede utilizar bucles for anidados para repetir los elementos de una matriz
multidimensional, como se muestra en el siguiente ejemplo.
Para utilizar un bucle for con el fin de repetir una matriz multidimensional:
1. Cree un nuevo documento de Flash y guárdelo como multiArray3.fla.
2. Añada el código ActionScript siguiente al fotograma 1 de la línea de tiempo:
// del ejemplo anterior
var gridSize:Number = 3;
var mainArr:Array = new Array(gridSize);
var i:Number;
var j:Number;
for (i = 0; i < gridSize; i++) {
mainArr[i] = new Array(gridSize);
for (j = 0; j < gridSize; j++) {
mainArr[i][j] = "[" + i + "][" + j + "]";
}
}
Matrices 137
En este código, que ya hemos visto en el ejemplo anterior, el bucle externo repite cada uno
de los elementos de mainArray. El bucle interno repite cada una de las matrices anidadas y
da como resultado el nodo de cada matriz.
3. Añada el siguiente código ActionScript al fotograma 1 de la línea de tiempo, detrás del
código introducido en el paso 2:
// repetir elementos
var outerArrayLength:Number = mainArr.length;
for (i = 0; i < outerArrayLength; i++) {
var innerArrayLength:Number = mainArr[i].length;
for (j = 0; j < innerArrayLength; j++) {
trace(mainArr[i][j]);
}
}
Este código ActionScript repite los elementos de la matriz. La propiedad length de cada
matriz se utiliza como condición para el bucle.
4. Seleccione Control > Probar película para ver los elementos que se muestran en el panel
Salida. Deberá ver lo siguiente en el panel Salida:
[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
[2][0]
[2][1]
[2][2]
Las matrices asociativas son conjuntos no ordenados de pares formados por una clave y
N OT A
un valor. El código no debe dar por sentado que las claves de una matriz asociativa
estén en un orden específico.
Al utilizar matrices asociativas, puede llamar al elemento de matriz que necesite empleando
una cadena en lugar de un número, ya que las cadenas suelen ser más fáciles de recordar. La
desventaja es que no son tan útiles en un bucle porque no utilizan números como valor de
índice. Sí son útiles si normalmente necesita consultar por valor de clave. Por ejemplo, si tiene
una matriz de nombres y edades que necesita consultar con frecuencia, podría utilizar una
matriz asociativa.
En el siguiente ejemplo se muestra cómo crear un objeto y definir una serie de propiedades en
una matriz asociativa.
La primera línea del código ActionScript define un nuevo objeto (someObj) que se utiliza
como matriz asociativa. Seguidamente, se definen una serie de propiedades de someObj.
Finalmente, se muestra una propiedad que se selecciona empleando el operador de punto
y la sintaxis de acceso a una matriz.
NO T A
Puede acceder a las variables de una matriz asociativa empleando dos métodos
diferentes: sintaxis con puntos (someObj.myColor) y sintaxis de acceso a una matriz
(someObj[‘myColor’]).
Matrices 139
3. Seleccione Control > Probar película para probar el código ActionScript.
El panel Salida muestra el número 72 dos veces, que representan a los dos niveles alfa
trazados.
Existen dos formas de crear matrices asociativas en ActionScript 2.0:
■ Mediante un constructor Object
■ Mediante un constructor Array
Ambos se demuestran en los próximos ejemplos.
asociativa.
Si utiliza el constructor Object para crear una matriz asociativa, puede aprovechar las ventajas
que ofrece la inicialización de la matriz con un literal de objeto. Una instancia de la clase Object,
conocida también como objeto genérico, es funcionalmente idéntica a una matriz asociativa. De
hecho, las instancias de Object son básicamente matrices asociativas. Puede utilizar matrices
asociativas para lograr una funcionalidad similar a la de un diccionario, en los que es más
adecuado contar con claves de cadena que con índices numéricos. El nombre de cada propiedad
del objeto genérico actúa a modo de clave que permite el acceso a un valor almacenado. Para más
información sobre el uso de literales, consulte “Literales” en la página 94. Para más información
sobre clases, consulte el Capítulo 6, “Clases”, en la página 195.
Este código crea una matriz asociativa denominada monitorInfo y utiliza un literal de
objeto para inicializar la matriz con dos pares clave/valor.
Si no necesita inicializar la matriz en el momento de su declaración, puede utilizar el
NO T A
Tras utilizar un literal de objeto o el constructor de la clase Object para crear la matriz,
puede añadir nuevos valores a la matriz empleando el operador de corchetes ([]) o el
operador de punto (.), como se muestra en este código. El código que acaba de escribir
añade dos valores nuevos a la matriz monitorInfo.
5. Seleccione Control > Probar película.
El panel Salida muestra el siguiente texto:
16:10, 16.7 million
Tenga en cuenta que una clave puede contener un carácter de espacio. Esto es posible con
el operador de corchetes, pero genera un error con el operador de punto. No es
recomendable utilizar espacios en los nombres de claves. Para más información sobre
operadores de corchetes y de punto, consulte “Operadores” en la página 142. Para más
información sobre la aplicación de un formato correcto, consulte “Aplicación de formato a
la sintaxis de ActionScript” en la página 808.
La segunda forma de crear una matriz asociativa consiste en utilizar el constructor Array y
utilizar después el operador de corchetes ([]) o el operador de punto (.) para añadir pares de
claves y valores a la matriz. Si declara la matriz asociativa con el tipo Array, no podrá utilizar
un literal de objeto para inicializar la matriz.
La utilización del constructor Array para crear una matriz asociativa no aporta ninguna
NO T A
En el siguiente ejemplo se muestra cómo utilizar el constructor Array para crear una matriz
asociativa.
Matrices 141
3. Seleccione Control > Probar película.
El panel Salida muestra el siguiente texto:
Flat Panel, 1600 x 1200
La utilización del constructor Array para crear una matriz asociativa no aporta
N OT A
Las matrices asociativas son básicamente instancias de la clase Object, por lo que no hay
ninguna ventaja en crear matrices asociativas empleando el constructor Array. Aunque cree
una matriz asociativa con el constructor new Array(), no puede utilizar ninguno de los
métodos y propiedades de la clase Array (como sort() o length) al utilizar la matriz
asociativa. Si desea utilizar pares clave/valor en lugar de un índice numérico, debe emplear la
clase Object en lugar de una matriz asociativa.
Operadores
En esta sección se describen las reglas generales para los tipos comunes de operadores,
precedencia del operador y asociatividad de operadores.
Los operadores son caracteres que especifican cómo combinar, comparar o cambiar los valores
de una expresión. Una expresión es cualquier sentencia para la que Flash puede calcular el
resultado y que devuelve un valor. Puede crear una expresión combinando operadores y
valores, o bien llamando a una función. Para más información sobre expresiones, consulte
“Sintaxis, sentencias y expresiones” en la página 76.
Por ejemplo, una expresión matemática utiliza operadores numéricos para manipular los
valores que utiliza. Ejemplos de caracteres operadores son +, <, * y =. Una expresión está
formada por operadores y operandos y puede ser cualquier combinación válida de símbolos de
ActionScript que representen un valor. Un operando es la parte del código sobre la que actúa
el operador. Por ejemplo, en la expresión x + 2, x y 2 son operandos y + es un operador.
Las expresiones y los operadores se utilizan con frecuencia en el código. Puede combinar
operadores y valores para crear una expresión, o bien llamar a una función.
abarcan todos y cada uno de ellos. Para obtener información sobre cada operador,
incluidos los operadores especiales que no pertenecen a ninguna de las siguientes
categorías, consulte Referencia del lenguaje ActionScript 2.0.
Operadores 143
Utilización de operadores para manipular valores
Los operadores se utilizan habitualmente para manipular valores en Flash. Por ejemplo, puede
crear un juego en Flash en el que la puntuación cambie dependiendo de la interacción del
usuario con instancias del escenario. Puede utilizar una variable para que contenga el valor y
operadores que manipulen el valor de la variable.
Por ejemplo, puede que desee aumentar el valor de una variable denominada myScore. En el
siguiente ejemplo se muestra cómo utilizar los operadores + (suma) y += (asignación de suma)
para sumar e incrementar valores en el código.
// ejemplo dos
var secondScore:Number = 1;
secondScore += 3;
trace("Example two: " + secondScore); // 4
El operador de suma es bastante sencillo, ya que suma dos valores. En el primer ejemplo
de código, se suma el valor actual de myScore y el número 1 y, seguidamente, se almacena
el resultado en la variable myScore.
El segundo ejemplo de código utiliza el operador de asignación de suma para sumar y asignar
un nuevo valor en un solo paso. Puede reescribir la línea myScore = myScore + 1 (del
ejercicio anterior) como myScore++ o incluso myScore += 1. El operador de incremento (++)
es una forma simplificada de expresar myScore = myScore + 1, ya que manipula un
incremento y una asignación al mismo tiempo. En el siguiente código ActionScript puede
verse un ejemplo de operador de incremento:
var myNum:Number = 0;
myNum++;
trace(myNum); // 1
myNum++;
trace(myNum); // 2
El panel Salida muestra los números 1 a 9, que es el incremento del valor de i hasta alcanzar la
condición de finalización (i es igual a 10) cuando se detiene. El último valor mostrado es 9.
Por consiguiente, el valor de i es 1 cuando el archivo SWF empieza a reproducirse y 9 al
finalizar trace.
Para más información sobre condiciones y bucles, consulte “Sentencias” en la página 106.
Observará que el resultado de esta sentencia es 14, ya que la multiplicación tiene una
precedencia de operador superior. Por consiguiente, se calcula primero 4 * 3 y el resultado se
suma a 2.
Operadores 145
Puede controlar lo que debe ocurrir colocando las expresiones entre paréntesis. ActionScript
establece una precedencia de operadores predeterminada que puede modificar utilizando el
operador de paréntesis (()). Al colocar la expresión de suma entre paréntesis, ActionScript
calcula primero la suma:
var mySum:Number;
mySum = (2 + 4) * 3;
trace(mySum); // 18
Pueden darse situaciones en las que dos o más operadores con la misma precedencia aparezcan
en la misma expresión. En estos casos, el compilador utiliza las reglas de asociatividad para
determinar qué operador se procesa primero. Todos los operadores binarios, salvo los
operadores de asignación, tienen asociatividad desde la izquierda, lo que significa que los
operadores de la izquierda se procesan antes que los operadores de la derecha. Los operadores
de asignación y el operador condicional (?:) tienen asociatividad desde la derecha, lo que
significa que los operadores de la derecha se procesan antes que los operadores de la izquierda.
Para más información sobre operadores de asignación, consulte “Utilización de operadores de
asignación” en la página 161. Para más información sobre el operador condicional (?:),
consulte “El operador condicional” en la página 167.
Piense, por ejemplo, en los operadores menor que (<) y mayor que (>), que tienen la misma
precedencia. Si ambos operadores se utilizan en la misma expresión, el operador de la
izquierda se procesará en primer lugar porque ambos operadores tienen asociatividad desde la
izquierda. Esto significa que las dos sentencias siguientes generan el mismo resultado:
trace(3 > 2 < 1); // false
trace((3 > 2) < 1); // false
Operadores 147
Operador Descripción Asociatividad
! NOT lógico De derecha a
izquierda
new Asignar objeto De derecha a
izquierda
delete Anular la asignación de objeto De derecha a
izquierda
typeof Tipo de objeto De derecha a
izquierda
void Devuelve un valor no definido De derecha a
izquierda
* Multiplicar De izquierda a
derecha
/ Dividir De izquierda a
derecha
% Módulo De izquierda a
derecha
+ Más unario De derecha a
izquierda
- Menos unario De derecha a
izquierda
<< Desplazamiento a la izquierda en modo bit De izquierda a
derecha
>> Desplazamiento a la derecha en modo bit De izquierda a
derecha
>>> Desplazamiento a la derecha en modo bit (sin De izquierda a
signo) derecha
instanceof Instancia de (busca la clase de la que el objeto De izquierda a
es una instancia) derecha
Requiere Flash Player 6 o posterior
< Menor que De izquierda a
derecha
<= Menor o igual que De izquierda a
derecha
> Mayor que De izquierda a
derecha
, Coma De izquierda a
derecha
Operadores 149
Utilización de operadores con cadenas
Los operadores de comparación solamente comparan cadenas si ambos operandos son
cadenas. Una excepción a esta regla es el operador de igualdad estricta (===). Si solamente uno
de los operandos es una cadena, ActionScript convierte ambos operandos en números y realiza
una comparación numérica. Para más información sobre operadores numéricos, consulte
“Utilización de operadores numéricos” en la página 156.
Salvo en el caso del operador de igualdad (==), los operadores de comparación (>, >=, < y <=)
afectan a las cadenas de manera diferente a cuando operan en otros valores.
Los operadores de comparación comparan cadenas para determinar cuál de ellas es la primera
por orden alfabético. Las cadenas con caracteres en mayúsculas preceden a las cadenas en
minúsculas. Dicho de otro modo, “Egg” va antes que “chicken”.
var c:String = "chicken";
var e:String = "Egg";
trace(c < e); // false
var riddleArr:Array = new Array(c, e);
trace(riddleArr); // chicken,Egg
trace(riddleArr.sort()); // Egg,chicken
Los operadores de comparación sólo comparan dos cadenas. Por ejemplo, los
NO T A
Este código da el siguiente resultado en un campo de texto con el nombre de instancia myTxt:
One carrot. 10 large eggplants. Lots of vegetable broth.
En el ejemplo anterior, se muestra cómo utilizar los operadores de suma (+) y asignación de
suma (+=) para concatenar cadenas. Observe cómo la tercera línea del código utiliza el
operador de suma para concatenar el valor de la variable myNum en el campo de texto, mientras
que la cuarta línea del código utiliza el operador de asignación de suma para concatenar una
cadena con el valor existente del campo de texto.
Si sólo uno de los operandos de cadena de texto es realmente una cadena, Flash convierte el
otro operando en una cadena. Por consiguiente, el valor de myNum se convierte en una cadena
en el ejemplo anterior.
ActionScript trata los espacios del comienzo o del final de una cadena como parte literal
NO T A
de la cadena.
Operadores 151
Utilización de operadores de punto y de acceso a una
matriz
Puede utilizar el operador de punto (.) y el operador de acceso a una matriz ([]) para acceder
a propiedades incorporadas en ActionScript o personalizadas. Los operadores de punto se
utilizan para hacer referencia a determinados índices de un objeto. Por ejemplo, si tiene un
objeto que contiene diversos datos del usuario, puede especificar un determinado nombre de
clave en el operador de acceso a la matriz para recuperar un nombre de usuario, como se
muestra en el siguiente código ActionScript:
var someUser:Object = {name:"Hal", id:2001};
trace("User's name is: " + someUser["name"]); // El nombre del usuario es:
Hal
trace("User's id is: " + someUser["id"]); // El ID del usuario es: 2001
Por ejemplo, en el siguiente código ActionScript se utiliza el operador de punto para establecer
determinadas propiedades en los objetos:
myTextField.border = true;
year.month.day = 9;
myTextField.text = "My text";
El operador de punto y el operador de acceso a una matriz son muy similares. El operador de
punto toma un identificador como propiedad, mientras que el operador de acceso a una
matriz calcula el contenido y da como resultado un nombre y, seguidamente, accede al valor
de dicha propiedad con nombre. El operador de acceso a una matriz permite establecer
dinámicamente y recuperar nombres de instancia y variables.
El operador de acceso a una matriz es útil si no conoce exactamente qué claves hay en un
objeto. Cuando ocurre esto, puede utilizar un bucle for..in para repetir un objeto o un clip
de película y mostrar su contenido.
Este código ActionScript activa o desactiva la visibilidad de los clip de película anidados.
12. Seleccione Control > Probar película para probar el código ActionScript que acaba de
añadir.
Las cuatro instancias anidadas son ahora invisibles. El operador de acceso a una matriz le
permite repetir la ejecución en cada uno de los clip de película anidados en la instancia
myClip y establecer su propiedad visible dinámicamente. Esto le permite ahorrar tiempo,
ya que no tiene que hacer referencia a cada una de las instancias específicamente.
También puede utilizar el operador de acceso a una matriz en el lado izquierdo de una
asignación, lo que le permite establecer los nombres de instancia, variables y objetos
dinámicamente:
myNum[i] = 10;
En ActionScript 2.0, puede utilizar el operador de corchete para acceder a las propiedades de
un objeto que se crean dinámicamente, en el caso de que no se asigne el atributo dynamic a la
definición de clase de dicho objeto. También puede crear matrices multidimensionales
empleando este operador. Para más información sobre la creación de matrices
multidimensionales empleando operadores de acceso a una matriz, consulte “Creación de
matrices multidimensionales” en la página 135.
Operadores 153
Operadores de sufijo
Los operadores de sufijo toman un operador y aumentan o reducen el valor del operador.
Aunque estos operadores son unarios, se clasifican independientemente del resto de
operadores unarios debido a su mayor precedencia y a su comportamiento especial. Para
información sobre operadores unarios, consulte “Operadores unarios” en la página 154.
Al utilizar un operador de sufijo como parte de una expresión mayor, el valor de la expresión
se devuelve antes de que se procese el operador de sufijo. Por ejemplo, el siguiente código
muestra cómo se devuelve el valor de la expresión xNum++ antes de que se incremente el valor.
var xNum:Number = 0;
trace(xNum++); // 0
trace(xNum); // 1
Operadores unarios
Los operadores unarios utilizan un operando. Los operadores de incremento (++) y
decremento (--) de este grupo son operadores de prefijo, lo que significa que aparecen delante
del operando en una expresión. También pueden aparecer tras el operando, en cuyo caso son
operadores de sufijo. Para más información sobre operadores de sufijo, consulte “Operadores
de sufijo” en la página 154.
Los operadores de prefijo difieren de los correspondientes operadores de sufijo en que la
operación de incremento o decremento se realiza antes de que se devuelva el valor de la
expresión global. Por ejemplo, el siguiente código muestra cómo se devuelve el valor de la
expresión xNum++ después de que se incremente el valor.
var xNum:Number = 0;
trace(++xNum); // 1
trace(xNum); // 1
Operadores multiplicativos
Los operadores multiplicativos toman dos operandos y realizan cálculos de multiplicación,
división o módulo. Entre los operadores numéricos también figuran los operadores aditivos.
Para información sobre operadores aditivos, consulte “Operadores aditivos” en la página 155.
Todos los operadores de esta tabla tienen idéntica precedencia:
Operadores aditivos
Los operadores aditivos toman dos operandos y realizan cálculos de suma y resta. Entre los
operadores numéricos también figuran los operadores multiplicativos. Para información sobre
operadores multiplicativos, consulte “Operadores multiplicativos” en la página 155.
Los operadores de esta tabla tienen idéntica precedencia:
Operadores 155
Utilización de operadores numéricos
Los operadores numéricos se utilizan para sumar, restar, dividir y multiplicar valores en
ActionScript. Puede realizar diferentes tipos de operaciones aritméticas. Uno de los operadores
más comunes es el operador de incremento, que habitualmente adopta la forma i++. Este
operador también permite realizar otras operaciones. Para más información sobre el operador
de incremento, consulte “Utilización de operadores para manipular valores” en la página 144.
Puede añadir el incremento antes (preincremento) o después (posincremento) de un operando.
Operadores de igualdad
Los operadores de igualdad toman dos operandos, comparan sus valores y devuelven un valor
booleano. Todos los operadores de esta tabla tienen idéntica precedencia:
Operadores 157
Utilización de operadores relacionales y de igualdad
Los operadores relacionales y de igualdad, también conocidos como operadores de comparación,
comparan valores de expresiones y devuelven true o false (un valor booleano). Los
operadores de comparación se utilizan con frecuencia en sentencias condicionales y bucles
para especificar la condición con la que debe detenerse el bucle.
El operador de igualdad (==) se emplea para averiguar si los valores o referencias de dos
operandos son iguales; el resultado de esta comparación devuelve un valor booleano. Los
valores de operandos de cadena, número o booleanos comparan utilizando un valor. Los
operandos de objeto y matriz se comparan mediante una referencia.
En este ejemplo, se muestra cómo se utiliza el operador de igualdad para comprobar la
longitud de la matriz y mostrar un mensaje en el panel Salida si no hay elementos en la matriz.
var myArr:Array = new Array();
if (myArr.length == 0) {
trace("the array is empty.");
}
Al seleccionar Control > Probar película, la cadena the array is empty aparece en el panel
Salida.
Puede utilizar el operador de igualdad para comparar valores, pero no puede utilizarlo para
establecer valores. Pruebe el operador de asignación (=) para comprobar la igualdad.
a:
var myNum:Number = 4;
a
if (myNum = 2) {
En primer lugar, se definen variables numéricas: num1 y num2. Si compara las variables
utilizando el operador de igualdad, Flash intenta convertir los valores al mismo tipo de datos y
luego compara los valores para comprobar si son iguales. Al utilizar el operador de igualdad
estricta (===), Flash no intenta realizar ninguna conversión de tipos de datos antes de
comparar los valores. Como resultado, Flash considera las variables como dos valores
independientes.
En el siguiente ejemplo, se utiliza el operador mayor o igual que (>=) para comparar valores y
ejecutar un código en función del valor que introduzca el usuario en un campo de texto.
Operadores 159
Para utilizar el operador mayor o igual que en el código:
1. Seleccione Archivo > Nuevo y, a continuación, seleccione Documento de Flash para crear
un nuevo archivo FLA.
2. Añada el código siguiente al fotograma 1 de la línea de tiempo:
this.createTextField("myTxt", 20, 0, 0, 100, 20);
myTxt.type = "input";
myTxt.border = true;
myTxt.restrict = "0-9";
this.createEmptyMovieClip("submit_mc", 30);
submit_mc.beginFill(0xFF0000);
submit_mc.moveTo(0, 0);
submit_mc.lineTo(100, 0);
submit_mc.lineTo(100, 20);
submit_mc.lineTo(0, 20);
submit_mc.lineTo(0, 0);
submit_mc.endFill();
submit_mc._x = 110;
submit_mc.onRelease = function(evt_obj:Object):Void {
var myNum:Number = Number(myTxt.text);
if (isNaN(myNum)) {
trace("Please enter a number");
return;
}
if (myNum >= 10) {
trace("Your number is greater than or equal to 10");
} else {
trace("Your number is less than 10");
}
};
5. Seleccione Control > Probar película para probar de nuevo el código ActionScript.
Operadores de asignación
Los operadores de asignación toman dos operandos y asignan un valor a un operando en
función del valor del otro operando. Todos los operadores de esta tabla tienen idéntica
precedencia:
Operadores 161
También puede utilizar el operador de asignación para asignar valores a diversas variables en la
misma expresión. En la siguiente sentencia, se asigna el valor 10 a las variables numOne,
numTwo y numThree.
var numOne:Number;
var numTwo:Number;
var numThree:Number;
numOne = numTwo = numThree = 10;
Al utilizar el operador de asignación, puede tener problemas si intenta sumar valores de una
expresión, como puede observarse en el siguiente ejemplo:
trace("the sum of 5 + 2 is: " + 5 + 2); // la suma de 5 + 2 es: 52
Flash concatena los valores 5 y 2 en lugar de sumarlos. Para resolver este problema, puede
colocar la expresión 5+2 entre paréntesis, como se muestra en el siguiente código:
trace("the sum of 5 + 2 is: " + (5 + 2)); // la suma de 5 + 2 es: 7
Operadores lógicos
Los operadores lógicos permiten comparar valores booleanos (true y false) y, seguidamente,
devuelven un valor booleano en función del resultado de dicha comparación. Por ejemplo, si tiene
dos operandos que dan como resultado true, el operador lógico AND (&&) devuelve true. O bien,
si uno o ambos operandos dan como resultado true, el operador lógico OR (||) devuelve true.
Los operadores lógicos toman dos operandos y devuelven un resultado booleano. Los
operadores lógicos, que tienen una precedencia diferente, se enumeran en esta tabla por orden
decreciente de precedencia:
this.createEmptyMovieClip("submit_mc", 30);
submit_mc.beginFill(0xFF0000);
submit_mc.moveTo(0, 0);
submit_mc.lineTo(100, 0);
submit_mc.lineTo(100, 20);
submit_mc.lineTo(0, 20);
submit_mc.lineTo(0, 0);
submit_mc.endFill();
submit_mc._x = 110;
submit_mc.onRelease = function():Void {
var myNum:Number = Number(myTxt.text);
if (isNaN(myNum)) {
trace("Please enter a number");
return;
}
if ((myNum > 10) && (myNum < 20)) {
trace("Your number is between 10 and 20");
} else {
trace("Your number is NOT between 10 and 20");
}
};
Operadores 163
Al utilizar operandos, debe tener cuidado con el orden de éstos, especialmente si utiliza
condiciones complejas. En el siguiente fragmento, se observa cómo se utiliza el operador
lógico AND para comprobar que un número está comprendido entre 10 y 20. En función del
resultado, se muestra el mensaje más adecuado. Si el número es menor que 10 o mayor que
20, se muestra un mensaje alternativo en el panel Salida.
submit_mc.onRelease = function():Void {
var myNum:Number = Number(myTxt.text);
if (isNaN(myNum)) {
trace("Please enter a number");
return;
}
if ((myNum > 10) && (myNum < 20)) {
trace("Your number is between 10 and 20");
} else {
trace("Your number is NOT between 10 and 20");
}
};
Para más información sobre la utilización de operadores en modo bit, consulte “Utilización de
operadores en modo bit” en la página 165. Para obtener información específica sobre cada
operador en modo bit, consulte su entrada en Referencia del lenguaje ActionScript 2.0.
Para más información sobre la utilización de operadores en modo bit, consulte “Utilización de
operadores en modo bit” en la página 165. Para obtener información específica sobre cada
operador en modo bit, consulte su entrada en Referencia del lenguaje ActionScript 2.0.
Operadores 165
Para utilizar el operador en modo bit OR:
1. Seleccione Archivo > Nuevo para crear un documento de Flash nuevo.
2. Introduzca el siguiente código ActionScript en el panel Acciones:
var myArr:Array = new Array("Bob", "Dan", "doug", "bill", "Hank",
"tom");
trace(myArr); // Bob,Dan,doug,bill,Hank,tom
myArr.sort(Array.CASEINSENSITIVE | Array.DESCENDING);
trace(myArr); // tom,Hank,doug,Dan,Bob,bill
La primera línea define una matriz de nombres aleatorios y los traza en el panel Salida.
Posteriormente, se llama al método Array.sort() y se especifican dos opciones de orden
mediante valores constantes Array.CASEINSENSITIVE y Array.DESCENDING. El resultado
del método sort provoca que los elementos de la matriz se clasifiquen en orden inverso (de
la z a la a). La búsqueda distingue entre mayúsculas y minúsculas; a y A se consideran
equivalentes, en lugar de lugar de realizarse una búsqueda con distinción entre mayúsculas
y minúsculas en la que Z va antes que a.
3. Seleccione Control > Probar película para probar el código ActionScript. El panel Salida
muestra este texto:
Bob,Dan,doug,bill,Hank,tom
tom,Hank,doug,Dan,Bob,bill
Aunque pueda no resultar obvio de forma inmediata, los valores numéricos de las opciones de
orden (sort) son en realidad dígitos en modo bit (binarios o en base 2). El valor constante
Array.CASEINSENSITIVE es igual al valor numérico 1, que a su vez es el valor binario 1. El
valor constante Array.DECENDING tiene el valor numérico 2 o el valor binario 10.
La utilización de números binarios puede resultar compleja. Sólo hay dos valores binarios
posibles, 1 o 0, razón por la cual el valor 2 se representa como 10. Si desea mostrar el
número 3 en forma binaria, éste sería 11 (1+10). La representación binaria del número 4 es
100, la del 5, 101 y, así, sucesivamente.
El operador condicional
El operador condicional es un operador ternario, lo que significa que toma tres operandos.
El operador condicional es un método abreviado para la aplicación de la sentencia
condicional if..else:
Para obtener información sobre la utilización del operador condicional y ver un ejemplo,
consulte “El operador condicional y sintaxis alternativa” en la página 117.
Operadores 167
Para utilizar operadores en ActionScript:
1. Cree un nuevo documento de Flash.
2. Escriba el siguiente código ActionScript en el fotograma 1 de la línea de tiempo principal:
var correctAnswers:Number = 11;
var totalQuestions:Number = 13;
//redondear al entero más próximo
//var score:Number = Math.round(correctAnswers / totalQuestions * 100);
//redondear a dos cifras decimales
var score:Number = Math.round(correctAnswers / totalQuestions * 100 *
100) / 100;
trace("You got " + correctAnswers + " out of " + totalQuestions + "
answers correct, for a score of " + score + "%.");
Funciones y métodos
Conocer las funciones es importante a la hora de escribir código ActionScript, crear clases y
utilizar métodos. Existen diversos tipos de funciones con los que deberá trabajar. En este
capítulo, conocerá las funciones y los métodos: aprenderá a utilizarlos en sus aplicaciones
cuando emplee clases incorporadas, así como a escribirlos. En el Capítulo 6, “Clases”, creará
clases personalizadas, para lo cual deberá utilizar funciones con frecuencia. También aprenderá
a escribir funciones en archivos de clases de ActionScript.
Se pueden utilizar funciones del código para añadir interactividad, animaciones y otros efectos
a las aplicaciones. En este capítulo se tratan los tipos de funciones que se pueden escribir en las
aplicaciones de Flash. Para obtener información sobre la definición de funciones y métodos,
así como ejercicios en los que se escriben y utilizan funciones y métodos de Flash, consulte los
siguientes temas:
Funciones y métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Aspectos básicos de los métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Funciones y métodos
Los métodos y funciones son bloques de código de ActionScript que pueden volver a utilizarse
en cualquier parte de un archivo SWF. Puede escribir funciones en el archivo FLA o en un
archivo de código ActionScript externo y, seguidamente, llamar a la función desde cualquier
lugar de los documentos. Los métodos son simplemente funciones ubicadas dentro de una
definición de clase de ActionScript. Puede definir funciones para que éstas ejecuten una serie
de sentencias en función de los valores que se le han pasado. Sus funciones también pueden
devolver valores. Una vez que se ha definido una función, podrá llamarla desde cualquier línea
de tiempo, incluida la línea de tiempo de un archivo SWF que se ha cargado.
169
Si pasa valores a una función como parámetros, la función puede realizar cálculos empleando
los valores facilitados. Cada función tiene sus propias características y algunas necesitan que se
les pasen determinados tipos o números de valores. Si pasa más parámetros de los que requiere
la función, la función ignora los valores sobrantes. Si no pasa un parámetro requerido, la
función asigna el tipo de datos undefined a los parámetros vacíos. Esto puede provocar
errores durante la ejecución. Una función también puede devolver valores (consulte
“Devolución de valores de funciones” en la página 190).
Para llamar a una función, la definición de ésta debe encontrase en un fotograma al que
N OT A
Una función correctamente escrita puede compararse a una “caja negra”. Si la función incluye
comentarios acerca de sus entradas, salidas y su finalidad, no es necesario que la persona que
utilice la función comprenda exactamente cómo funciona internamente.
La sintaxis básica de una función con nombre sencilla es:
function traceMe() {
trace("su mensaje");
}
traceMe();
Para obtener información sobre la escritura de funciones con nombre, consulte “Escritura de
funciones con nombre” en la página 175.
La sintaxis básica de una función con nombre sencilla que se crea según el ejemplo anterior al
pasar un parámetro, yourMessage, es:
function traceMe(yourMessage:String) {
trace(yourMessage);
}
traceMe("¿Qué tal?");
De forma alternativa, si desea pasar varios parámetros, podría utilizar el siguiente código:
var yourName:String = "Ester";
var yourAge:String = "65";
var favSoftware:String = "Flash";
function traceMe(favSoftware:String, yourName:String, yourAge:String) {
trace("Me llamo " + yourName + ", me gusta" + favSoftware + " y tengo " +
yourAge + ".");
}
traceMe(favSoftware,yourName,yourAge);
Para más información sobre cómo pasar parámetros, consulte “Paso de parámetros a una
función” en la página 187.
consulte “Utilización del asistente de script para escribir ActionScript” en la página 362,
“Creación de un evento startDrag/stopDrag con el Asistente de script” en la página 366
y el tutorial ActionScript: Utilización del modo de asistente de script (que comienza con
“Apertura del documento inicial” en la página 229).
Para más información sobre funciones y métodos, consulte los siguientes temas:
■ “Tipos de funciones y métodos” en la página 171
class Person {
public static var numPeople:Number = 0;
// miembros de instancia
private var _speed:Number;
// constructor
public function Person(speed:Number) {
Person.numPeople++;
this._speed = speed;
}
// métodos de instancia
public function walk(speed:Number):Void {
this._speed = speed;
}
public function run():Void {
this._speed *= 2;
}
public function rest():Void {
this._speed = 0;
}
Para una demostración completa sobre la forma de escribir métodos como los del ejemplo de
código anterior, consulte el Capítulo 6, “Clases”, en la página 195. Los métodos que usted
utiliza en el código podrían pertenecer a una clase que está incorporada en el lenguaje
ActionScript. MovieClip y Math son ejemplos de clases de nivel superior que pueden
utilizarse en una aplicación. Cuando utiliza métodos de estas clases en el código, se trata de
funciones escritas en la clase incorporada (similar al ejemplo de código anterior). Como
alternativa, puede utilizar los métodos de una clase personalizada escrita por usted.
Las funciones que no pertenecen a una clase se conocen como funciones de nivel superior (a
veces se denominan funciones predefinidas o incorporadas), lo que significa que pueden llamarse
sin un constructor. Ejemplos de funciones que están incorporadas en el nivel superior del
lenguaje ActionScript son trace() y setInterval().
Para añadir al código una llamada a una función de nivel superior, basta con añadir una única
línea de código en el panel Script del panel Acciones. Por ejemplo, escriba lo siguiente:
trace("mi mensaje");
Al probar el archivo SWF con esta única línea de código, se llamará a la función de nivel
superior trace() y aparecerá texto en el panel Salida.
Recuerde: cuando desee asignar un método a una propiedad, debe omitir los paréntesis
después del nombre del método ya que está pasando una referencia a la función:
my_mc.myMethod = aFunction;
También puede definir funciones de muchas otras formas. Para más información sobre cada
tipo de función, consulte las secciones siguientes:
■ “Funciones incorporadas y de nivel superior” en la página 173
■ “Escritura de funciones con nombre” en la página 175
■ “Escritura de funciones anónimas y callback” en la página 176
■ “Literales de función” en la página 179
■ “Referencia y llamada a las funciones definidas por el usuario” en la página 181
■ “Funciones constructoras” en la página 179
Para obtener información sobre la escritura y utilización de funciones y métodos, consulte las
siguientes secciones relacionadas. Para obtener información sobre la utilización de funciones,
consulte “Utilización de funciones en Flash” en la página 183. Para obtener información sobre
la utilización de métodos, consulte “Aspectos básicos de los métodos” en la página 192.
consulte “Utilización del asistente de script para escribir ActionScript” en la página 362,
“Creación de un evento startDrag/stopDrag con el Asistente de script” en la página 366
y el tutorial ActionScript: Utilización del modo de asistente de script (que comienza con
“Apertura del documento inicial” en la página 229).
Para llamar a una función, la definición de ésta debe encontrase en un fotograma al que
NO T A
Las funciones incorporadas son fáciles de usar. Para llamar a una función, utilice el nombre de
función e indique los parámetros necesarios para la misma. (Para obtener información sobre
los parámetros necesarios, consulte la entrada de la función en Referencia del lenguaje
ActionScript 2.0). Por ejemplo, añada el código ActionScript siguiente al fotograma 1 de la
línea de tiempo:
trace("mi mensaje");
Al probar el archivo SWF, aparece mi mensaje en el panel Salida. Otros dos ejemplos de
funciones de nivel superior son setInterval() y getTimer(). El siguiente ejemplo muestra
cómo utilizar conjuntamente estas dos funciones. Añada el código siguiente al fotograma 1 de
la línea de tiempo:
function myTimer():Void {
trace(getTimer());
}
var intervalID:Number = setInterval(myTimer, 100);
Este código crea un temporizador sencillo mediante getTimer() y utiliza las funciones de
nivel superior setInterval() y trace() para mostrar el número de milisegundos desde que
comenzó a reproducirse el archivo SWF en Flash Player.
La llamada a una función de nivel superior es igual que la llamada a una función definida por el
usuario. Para más información, consulte “Referencia y llamada a las funciones definidas por el
usuario” en la página 181. Para obtener información sobre cada función, consulte su entrada
en Referencia del lenguaje ActionScript 2.0.
En este código crea una función con nombre denominada myMessage, que utilizará
posteriormente en el script para llamar a una función trace().
Puede utilizar funciones con nombre en lugar de funciones anónimas. Las funciones con
nombre suelen ser más fáciles de leer y comprender (salvo en algunas circunstancias, como las
funciones callback). También puede hacer referencia por adelantado a una función con
nombre, lo que significa que hace referencia a ella antes de que tenga lugar la función en la
línea de tiempo.
También puede colocar myWidth() en cualquier fotograma que esté después del
NO T A
Al definir una función con nombre, funciona la llamada a ésta en un script de fotograma, aún
cuando el código equivalente no funcione con una función anónima:
// el código siguiente sí funciona porque se está llamando a una función con
nombre:
myWidth();
function myWidth() {
trace("foo");
}
// el código siguiente no funciona porque se está llamando a una función
anónima:
myWidth();
var myWidth:Function = function () {
trace("foo");
};
consulte “Utilización del asistente de script para escribir ActionScript” en la página 362,
“Creación de un evento startDrag/stopDrag con el Asistente de script” en la página 366
y el tutorial ActionScript: Utilización del modo de asistente de script (que comienza con
“Apertura del documento inicial” en la página 229).
Literales de función
Un literal de función es una función sin nombre que se declara en una expresión en lugar de en
una sentencia. Los literales de función son útiles si se desea usar una función temporalmente o
para utilizar una función en el código en el que podría emplearse una expresión. La sintaxis de
un literal de función es la siguiente:
function (param1, param2, etc) {
// sentencias
};
anterior.
Puede almacenar un literal de función en una variable para acceder a él en un punto posterior
del código. Para ello, deberá utilizar una función anónima. Para más información, consulte
“Escritura de funciones anónimas y callback” en la página 176.
Funciones constructoras
El constructor de una clase es una función especial a la que se llama automáticamente cuando
se crea una instancia de una clase mediante la palabra clave new (por ejemplo, var
my_xml:XML = new XML();). La función constructora tiene el mismo nombre que la clase
que la contiene. Por ejemplo, una clase Person personalizada que crease, incluiría la función
constructora siguiente:
public function Person(speed:Number) {
Person.numPeople++;
this._speed = speed;
}
Si no declara de forma explícita ninguna función constructora (es decir, si no crea una
N OT A
Una clase sólo puede contener una función constructora; ActionScript 2.0 no admite
funciones constructoras sobrecargadas. Además, una función constructora no puede tener un
tipo de retorno. Para más información sobre la escritura de funciones constructoras en
archivos de clase, consulte “Escritura de la función constructora” en la página 239.
consulte “Utilización del asistente de script para escribir ActionScript” en la página 362,
“Creación de un evento startDrag/stopDrag con el Asistente de script” en la página 366
y el tutorial ActionScript: Utilización del modo de asistente de script (que comienza con
“Apertura del documento inicial” en la página 229).
Para obtener información sobre la escritura de funciones con nombre, consulte “Escritura de
funciones con nombre” en la página 175. Para más información sobre parámetros, consulte
“Paso de parámetros a una función” en la página 187.
También puede definir sus propias funciones con nombre. Por ejemplo, la siguiente función
con nombre helloWorld() ha sido definida por el usuario:
function helloWorld() {
trace("Hello world!");
};
En el siguiente ejemplo se muestra cómo utilizar una función definida por el usuario en un
archivo FLA.
El código anterior crea una función definida por el usuario denominada traceHello()
que toma un argumento, name, y traza un mensaje de saludo. Para llamar a la función
definida por el usuario, se puede llamar a traceHello desde la misma línea de tiempo que
la definición de función y pasar un único valor de cadena.
3. Seleccione Control > Probar película para probar el documento de Flash.
Para más información sobre funciones con nombre, consulte “Escritura de funciones con
nombre” en la página 175. Las clases contienen muchas funciones definidas por el usuario.
Para obtener información sobre la escritura de funciones en archivos de clases, consulte
“Utilización de funciones en Flash” en la página 183. Asimismo, consulte las siguientes
secciones del Capítulo 6, “Clases”: “Utilización de métodos y propiedades de un archivo de
clase” en la página 215, “Métodos y propiedades (miembros) públicos, privados y estáticos” en
la página 217 y “Miembros de clase” en la página 221.
En el siguiente ejemplo se muestra cómo crear y llamar a una función en un archivo FLA.
Este código ActionScript define la función (definida por el usuario, con nombre)
denominada helloWorld(). Si prueba el archivo SWF en estos momentos, no ocurrirá
nada. Por ejemplo, no verá la sentencia trace en el panel Salida. Para ver la sentencia
trace, debe llamar a la función helloWorld().
4. Escriba la siguiente línea de código ActionScript después de la función:
helloWorld();
También puede colocar funciones en archivos de clases al utilizar ActionScript 2.0, como se
muestra en el siguiente ejemplo:
class Circle {
public function area(radius:Number):Number {
return (Math.PI * Math.pow(radius, 2));
}
public function perimeter(radius:Number):Number {
return (2 * Math.PI * radius);
}
public function diameter(radius:Number):Number {
return (radius * 2);
}
}
7. Seleccione Control > Probar película para probar los documentos. El panel Salida muestra
este texto:
month: 7
min: -3
max: 34
Tras pasar el parámetro, puede pasar un valor a la función al llamar a ésta. Este valor se traza
en el panel Salida de la siguiente forma:
myFunc("Esto es lo que se traza");
Cada parámetro se separa de los demás mediante una coma delimitadora. Muchas funciones
incorporadas en el lenguaje ActionScript tienen varios parámetros. Por ejemplo, el método
startDrag() de la clase MovieClip toma cinco parámetros, lockCenter, left, top, right y
bottom:
startDrag(lockCenter:Boolean, left:Number, top:Number, right:Number,
bottom:Number):Void
Las primeras líneas de código crean una función definida por el usuario denominada
traceMe(), que toma un único parámetro, yourMessage. La última línea de código llama
a la función traceMe() y pasa el valor de la cadena “¿Qué tal?”.
3. Seleccione Control > Probar película para probar el documento de Flash.
En el siguiente ejemplo se muestra cómo pasar varios parámetros a una función.
Algunas funciones realizan una serie de tareas sin devolver un valor. En el siguiente ejemplo se
devuelve el valor procesado. Dicho valor se captura en una variable, que posteriormente se
utiliza en la aplicación.
Funciones anidadas
Puede llamar a una función desde dentro de otra función. Esto le permite anidar funciones de
modo que éstas realicen determinadas tareas en Flash.
Por ejemplo, puede anidar funciones en la línea de tiempo principal para realizar tareas
específicas en una cadena. Escriba el código siguiente en el fotograma 1 de la línea de tiempo:
var myStr:String = "El pollo es amarillo.";
trace("Original string: " + myStr);
function formatText():Void {
changeString("Poner el pollo en el microondas.");
trace("Changed string: " + myStr);
}
function changeString(newtext:String):Void {
myStr = newtext;
}
// Llama a la función.
formatText();
Seleccione Control > Probar película para probar la función anidada. Las funciones
formatText() y changeString() se aplican a la cadena cuando se llama a la función
formatText().
Se utiliza el método sortOn() de la clase Array para crear un nuevo objeto Array
denominado userArr. La matriz se rellena con tres objetos que contienen un nombre y
una edad, tras lo cual la matriz se ordena en función del valor de la propiedad firstname
de cada objeto. Finalmente, se reproduce sobre cada elemento de la matriz y se muestran
los nombres en el panel Salida ordenados alfabéticamente por la primera letra.
3. Seleccione Control > Probar película para probar el archivo SWF.
Este código muestra la siguiente información en el panel Salida:
Dan
George
Socks
Como se mostró en la sección “Escritura de funciones con nombre” en la página 175, cuando
se escribe el siguiente código en el fotograma 1 de la línea de tiempo, el código ActionScript
define una función denominada eatCabbage().
function eatCabbage() {
trace("tastes bad");
}
eatCabbage();
En la mayoría de los nombres de métodos se utilizan verbos porque ejecutan una operación en
un objeto. Al igual que con las variables, no puede utilizar caracteres especiales y el nombre del
método no puede empezar por un número. Para más información, consulte “Convenciones de
asignación de nombre” en la página 777.
Clases
En este capítulo se describe cómo utilizar y escribir clases mediante ActionScript 2.0. Las
clases constituyen la base de ActionScript 2.0, ya que han cobrado una importancia aun
mayor de la que tenían en versiones anteriores de Macromedia Flash. A lo largo de este
capítulo tendrá la oportunidad de describir lo importante que son las clases en Flash.
Este capítulo comienza con la definición de diversos términos fundamentales y la relación de
éstos con las clases y la programación orientada a objetos (OOP). Seguidamente, estudiaremos
un archivo de clase de muestra, lo que le permitirá conocer cómo funciona cada sección del
archivo de clase y cómo está organizada la clase. En el resto del capítulo se muestra cómo crear
clases personalizadas y cómo utilizarlas en los documentos de Flash. Aprenderá en qué consiste
la ruta de clases de Flash y cómo debe documentarse una clase para que otras personas que
lean o utilicen el código entiendan fácilmente el código y el objetivo global de la clase.
En esta sección se incluyen ejemplos de código que puede utilizar para familiarizarse con la
creación de clases en ActionScript 2.0. Al término de este capítulo, debería poder escribir un
archivo de clase típico, ser capaz de reconocer clases de Flash y leer con soltura los archivos de
clases escritos por otras personas.
Si no está familiarizado con la creación de scripts en ActionScript 2.0, consulte el Capítulo 4,
“Principios básicos de la sintaxis y el lenguaje”, en la página 75 y el Capítulo 19,
“Recomendaciones y convenciones de codificación para ActionScript 2.0”, en la página 775.
Para más información sobre el trabajo con clases personalizadas e incorporadas, consulte los
temas siguientes:
Programación orientada a objetos y Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Escritura de archivos de clases personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Utilización de clases personalizadas en una aplicación. . . . . . . . . . . . . . . . . . . . . . 208
Ejemplo: Escritura de clases personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233
Ejemplo: Utilización de archivos de clases personalizadas en Flash . . . . . . . . . . .248
Asignación de una clase a símbolos en Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Compilación y exportación de clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Clases y ámbito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
Clases de nivel superior y clases incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
Utilización de clases incorporadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269
195
Programación orientada a objetos y Flash
ActionScript 2.0 es un lenguaje orientado a objetos. Al igual que ActionScript, los lenguajes
OOP se basan en el concepto de clases e instancias. Una clase define todas las propiedades que
distinguen a una serie de objetos. Por ejemplo, una clase User representa a una serie de
usuarios que están utilizando una aplicación. A continuación, tiene lugar la creación de la
instancia de la clase que, para la clase User, es uno de los usuarios concretos (uno de sus
miembros). La creación de la instancia produce una instancia de la clase User, que posee todas
las propiedades de esta clase.
Las clases también se consideran como tipos de datos o plantillas que pueden crearse para
definir un nuevo tipo de objeto. Por ejemplo, si necesita el tipo de datos Lettuce (lechuga) en
la aplicación, puede escribir la clase Lettuce. Esto define el objeto Lettuce, tras lo cual podrá
asignar los métodos Lettuce (wash()) y propiedades (leafy o bugs). Para definir una clase, se
utiliza la palabra clave class en un archivo de script externo. Puede crear un archivo de script
externo en la herramienta de edición de Flash seleccionando Archivo > Nuevo y Archivo
ActionScript.
Flash Player 8, que está disponible tanto en Flash Basic 8 como en Flash Professional 8, añade
diversas funciones nuevas al lenguaje ActionScript, como son los efectos de filtro, la carga y
descarga de archivos y la API externa. Como siempre, ActionScript 2.0 ofrece diversos
conceptos de OOP y palabras clave de gran potencia (como, por ejemplo, class, interface
y package) que habitualmente se incluyen en otros lenguajes de programación, como es el
caso de Java. El lenguaje de programación le permite crear estructuras de programa
reutilizables, escalables, sólidas y sostenibles. También puede disminuir el tiempo de
desarrollo al proporcionar a los usuarios ayuda para la codificación e información de
depuración detallada. Puede utilizar ActionScript 2.0 para crear objetos y establecer herencias,
así como para crear clases personalizadas y ampliar las clases de nivel superior e incorporadas
de Flash. En este capítulo aprenderá a crear clases y a utilizar clases personalizadas.
Flash Basic 8 y Flash Professional 8 incluyen aproximadamente 65 clases de nivel superior e
incorporadas que ofrecen desde tipos de datos básicos o “simples” (Array, Boolean, Date, etc.)
hasta errores y eventos personalizados, además de formas de cargar contenido externo (XML,
imágenes, datos binarios sin formato, etc.). También puede escribir sus propias clases
personalizadas e integrarlas en los documentos de Flash, o incluso ampliar las clases de nivel
superior y añadir su propia funcionalidad o modificar la funcionalidad existente. Por ejemplo,
en la sección “Miembros de clase” en la página 221 de este capítulo se muestra cómo crear una
clase personalizada Person que contiene propiedades personalizadas para el nombre y la edad
de la persona. Posteriormente, podrá considerar esta clase personalizada como un nuevo tipo
de datos en los documentos y crear una nueva instancia de la clase mediante el operador new.
196 Clases
Para más información sobre el trabajo con OOP, consulte los siguientes temas:
■ “Ventajas de utilizar clases” en la página 197
■ “Paquetes” en la página 198
■ “Valores y tipos de datos” en la página 201
■ “Conceptos básicos sobre la programación orientada a objetos” en la página 201
// En Circle.as:
class Circle {}
// En Triangle.as:
class Triangle {}
Dado que estos tres archivos de clase están relacionados, puede decidir ponerlos en un paquete
(directorio) denominado Shapes. En este caso, el nombre de clase calificado contendría la ruta
del paquete, así como el nombre de clase simple. Para las rutas de paquetes se utiliza la sintaxis
con punto, en la que cada punto indica un subdirectorio.
Por ejemplo, si ha colocado todos los archivos ActionScript que definen una forma en el
directorio Shapes, necesitará modificar el nombre de cada archivo de clase para que refleje la
nueva ubicación, del modo siguiente:
// En Shapes/Square.as:
class Shapes.Square {}
// En Shapes/Circle.as:
class Shapes.Circle {}
// En Shapes/Triangle.as:
class Shapes.Triangle {}
198 Clases
Para hacer referencia a una clase que reside en un directorio del paquete, puede especificar su
nombre de clase completo o importar el paquete mediante la sentencia import. Para más
información, consulte “Utilización de paquetes” en la página 199.
Utilización de paquetes
Los paquetes son directorios que contienen uno o más archivos de clase y que residen en un
directorio classspath determinado. Por ejemplo, el paquete flash.filters es un directorio del
disco duro que contiene varios archivos de clase para cada tipo de filtro (como BevelFilter,
BlurFilter, DropShadowFilter, entre otros) en Flash 8.
Para utilizar la sentencia import, debe especificar ActionScript 2.0 y Flash Player 6 o
N O TA
La sentencia import permite acceder a las clases sin especificar sus nombres completos. Por
ejemplo, si desea utilizar la clase BlurFilter en un script, debe hacer referencia a ésta con el
nombre completo (flash.filters.BlurFilter) o importarla; si lo hace, puede hacer referencia a
ésta con el nombre de clase (BlurFilter). El siguiente código ActionScript muestra las
diferencias entre utilizar la sentencia import y los nombres de clase completos.
El mismo código, escrito con una sentencia import, le permite acceder a BlurFilter con sólo el
nombre de la clase en lugar de tener siempre que utilizar el nombre completo. De este modo,
se ahorra tener que escribir y se reducen las posibilidades de cometer errores:
// con la importación
import flash.filters.BlurFilter;
var myBlur:BlurFilter = new BlurFilter(10, 10, 3);
La sentencia import sólo se aplica al script actual (fotograma u objeto) en el que se llama. Por
ejemplo, supongamos que importa todas las clases del paquete macr.util en el fotograma 1 de
un documento de Flash. En dicho fotograma, puede hacer referencia a las clases del paquete
por sus nombres de clase en lugar de los nombres completos. Sin embargo, si deseara utilizar el
nombre de clase en otro script de fotograma, necesitaría hacer referencia a las clases de dicho
paquete por sus nombres completos o añadir una sentencia import al otro fotograma que
importa las clases de dicho paquete.
200 Clases
Al utilizar sentencias import, también es importante advertir que las clases se importan
solamente para el nivel especificado. Por ejemplo, si importa todas las clases del paquete
mx.transitions, sólo se importan aquellas clases dentro del directorio /transitions/, no todas las
clases dentro de los subdirectorios (como las clases del paquete mx.transitions.easing).
Si importa una clase pero no la utiliza en el script, la clase no se exporta como parte del
S UG E R E NC I A
archivo SWF. Eso significa que puede importar grandes paquetes sin preocuparse del
tamaño del archivo SWF; el código de bytes asociado con una clase se incluye en un
archivo SWF únicamente si dicha clase se utiliza realmente.
Para más información sobre “strict data typing”, consulte “Asignación de tipos de datos y
“strict data typing”” en la página 337.
Para más información sobre objetos, consulte “Tipo de datos Object (objeto)” en
la página 335.
Herencia
Una de las principales ventajas de la OOP es que se pueden crear subclases de una clase (es
decir, ampliar la clase); la subclase heredará todas las propiedades y los métodos de la clase. La
subclase normalmente define métodos y propiedades adicionales o anula los métodos o
propiedades definidos en la superclase. Las subclases también pueden suplantar a
(proporcionar sus propias definiciones para) los métodos heredados de una superclase.
202 Clases
Una de las principales ventajas que aporta el uso de una estructura superclase/subclase es que
resulta más fácil reutilizar código similar entre diversas clases. Por ejemplo, puede crear una
superclase denominada Animal que contenga características y comportamientos comunes a
todos los animales. Seguidamente, tendría que crear diversas subclases que heredaran de la
superclase Animal y que añadieran características y comportamientos específicos de ese tipo de
animal.
Podría crear una clase Cat que heredara de otra clase. Por ejemplo, podría crear una clase
Mammal (mamífero) que defina determinadas propiedades y comportamientos comunes a
todos los mamíferos. Luego podría crear una subclase Cat (gato) que se ampliara a la clase
Mammal. A su vez, otra subclase, pongamos por caso, la clase Siamese (siamés), podría
ampliar (subclase) la clase Cat y, así, sucesivamente.
La escritura de subclases le permite reutilizar el código. En lugar de volver a crear todo el
código común a las dos clases, simplemente puede ampliar una clase existente.
una parte importante del proceso de diseño. Asegúrese de que determina esta jerarquía
antes de comenzar a programar.
Interfaces
En OOP, las interfaces pueden describirse como plantillas de definiciones de clases y clases que
implementan interfaces necesarias para implementar dicha plantilla de métodos. Siguiendo la
analogía del gato, una interfaz es similar a un modelo de un gato: indica las partes que
necesita, pero no necesariamente cómo se montan dichas partes o cómo funcionan.
Las interfaces se pueden utilizar para añadir estructura y facilitar el mantenimiento de las
aplicaciones. Dado que ActionScript 2.0 sólo admite la ampliación desde una única
superclase, puede utilizar las interfaces como una forma de herencia múltiple limitada.
Encapsulado
En el diseño elegante orientado a objetos, los objetos son vistos como “cajas negras” que
contienen o encapsulan funcionalidad. Un programador debe poder interactuar con un objeto
conociendo sólo sus propiedades, métodos y eventos (su interfaz de programación), sin
conocer los detalles de su implementación. Este enfoque permite a los programadores pensar
con niveles superiores de abstracción y ofrece un marco organizativo para la creación de
sistemas complejos.
El encapsulado es la razón por la cual ActionScript 2.0 incluye, por ejemplo, control de acceso
para miembros, de manera que los detalles de la implementación puedan ser privados e
invisibles en el código externo a un objeto. El código situado fuera del objeto se ve forzado a
interactuar con la interfaz de programación de objetos en lugar de con los detalles de la
implementación (que pueden estar ocultos en métodos y propiedades privadas). Este enfoque
aporta importantes ventajas; por ejemplo, permite al creador del objeto cambiar la
implementación del objeto sin necesidad de realizar cambios en el código externo al objeto, es
decir, siempre y cuando la interfaz de programación no cambie.
Para más información sobre encapsulado, consulte “Utilización de encapsulado” en
la página 232.
Polimorfismo
La OOP le permite expresar diferencias entre clases individuales mediante la técnica conocida
como polimorfismo, que permite que las clases sustituyan métodos de sus superclases y definan
implementaciones especializadas de dichos métodos. En Flash, las subclases pueden definir
implementaciones especializadas de métodos heredados de su superclase pero no pueden
acceder a la implementación de la superclase como en los demás lenguajes de programación.
204 Clases
Por ejemplo, puede comenzar con una clase llamada Mammal que tenga los métodos play()
y sleep(). Puede crear las subclases Cat, Monkey y Dog para ampliar la clase Mammal. Las
subclases sustituyen el método play() de la clase Mammal para reflejar los hábitos de estos
tipos de animales en particular. Monkey implementa el método play() para columpiarse de
árbol en árbol; Cat implementa el método play() para abalanzarse sobre una madeja; Dog
implementa el método play() para buscar una pelota. Dado que la funcionalidad sleep() es
similar entre los animales, utilizaría la implementación de la superclase.
Para más información sobre polimorfismo, consulte el Capítulo 7, “Herencia”, en la página
275 y “Utilización de polimorfismo en una aplicación” en la página 283.
■ Escriba los métodos. Agrupe los métodos por la funcionalidad y no por la accesibilidad o
el ámbito. Esta forma de organizar los métodos ayuda a mejorar la legibilidad y claridad
del código.
■ Escriba los métodos getter/setter (captador/definidor) en el archivo de clase.
En el siguiente ejemplo se muestra una clase sencilla de ActionScript denominada User.
Este código define una clase User personalizada que permite crear
nuevos usuarios y especificar información de inicio de sesión del
usuario.
*/
class User {
// variables de instancias privadas
private var __username:String;
private var __password:String;
// sentencia constructora
public function User(p_username:String, p_password:String) {
this.__username = p_username;
this.__password = p_password;
}
206 Clases
4. Guarde los cambios en el archivo de clase.
El fragmento de código anterior comienza con un comentario de documentación
estandarizado que especifica el nombre de la clase, el autor, la versión, la fecha en la que se
modificó por última vez, la información de copyright y una breve descripción de lo que
hace la clase.
La sentencia constructora de la clase User toma dos parámetros: p_username y
p_password, que se copian en las variables de instancias privadas de la clase __username y
__password. El resto del código de la clase define las propiedades getter (captador) y setter
(definidor) para las variables de instancias privadas. Si desea crear una propiedad de sólo
lectura, deberá definir una función getter, pero no una función setter. Por ejemplo, si desea
asegurarse de que un nombre de usuario no pueda cambiarse después de que se haya
definido, deberá eliminar la función setter username del archivo de la clase User.
5. Seleccione Archivo > Nuevo y seleccione Documento de Flash.
6. Seleccione Archivo > Guardar como y asigne al archivo el nombre user_test.fla. Guarde el
archivo en el mismo directorio que User.as.
7. Escriba el siguiente código ActionScript en el fotograma 1 de la línea de tiempo:
import User;
var user1:User = new User("un1", "pw1");
trace("Before:");
trace("\t username = " + user1.username); // un1
trace("\t password = " + user1.password); // pw1
user1.username = "1nu";
user1.password = "1wp";
trace("After:");
trace("\t username = " + user1.username); // 1nu
trace("\t password = " + user1.password); // 1wp
Dado que la clase User que ha creado anteriormente es muy básica, el código ActionScript
del documento de Flash es también muy sencillo. La primera línea de código importa la
clase personalizada User en el documento de Flash. La importación de la clase User le
permite utilizar la clase como tipo de datos personalizado.
Una sola instancia de la clase User se define y asigna a una variable denominada user1. Se
asigna un valor al objeto User user1 y se define el username (nombre de usuario) un1 y la
password (contraseña) pw1. Las dos sentencias trace siguientes muestran el valor actual
de user1.username y user1.password mediante las funciones getter (captador) de la
clase User, que en ambos casos devuelven cadenas. Los dos líneas siguientes utilizan las
funciones setter (definidor) de la clase User para establecer nuevos valores para las variables
username y password. Finalmente, se trazan los valores de username y password en el
panel Salida. Las sentencias trace muestran los valores modificados que se establecen
empleando las funciones setter.
208 Clases
En las siguientes secciones de este capítulo se incluyen ejemplos de código que puede utilizar
para familiarizarse con la creación de clases en ActionScript 2.0. Si no está familiarizado con
ActionScript 2.0, consulte el Capítulo 10, “Datos y tipos de datos”, en la página 327 y el
Capítulo 4, “Principios básicos de la sintaxis y el lenguaje”, en la página 75.
Para más información sobre el trabajo con clases personalizadas, consulte los siguientes temas:
■ “Importación de archivos de clases” en la página 209
■ “Utilización de un archivo de clase en Flash” en la página 214
■ “Utilización de métodos y propiedades de un archivo de clase” en la página 215
■ “Miembros de clase” en la página 221
■ “Métodos getter (captador) y setter (definidor)” en la página 226
■ “Cómo resuelve el compilador las referencias de clases” en la página 214
■ “Clases dinámicas” en la página 229
■ “Utilización de encapsulado” en la página 232
■ “Utilización de la palabra clave this en clases” en la página 233
Un archivo de ejemplo en su disco duro muestra la forma de crear un menú dinámico con
datos XML y un archivo de clase personalizado. El ejemplo llama al constructor XmlMenu() de
ActionScript y le pasa dos parámetros: la ruta al archivo de menú XML y una referencia a la
línea de tiempo actual. El resto de la funcionalidad reside en un archivo de clase
personalizado, XmlMenu.as.
El archivo de origen de muestra, xmlmenu.fla, se puede encontrar en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/XML_Menu.
Para más información sobre la sentencia include, consulte directiva #include en Referencia del
lenguaje ActionScript 2.0. Para más información sobre rutas de clases, consulte “Configuración
y modificación de la ruta de clases” en la página 211.
210 Clases
Configuración y modificación de la ruta de clases
Para utilizar una clase o una interfaz que ha definido, Flash debe localizar los archivos
ActionScript externos que contienen la definición de interfaz o clase. La lista de directorios en
los que Flash busca las definiciones de interfaces y clases se denomina ruta de clases.
Al crear un archivo de clase ActionScript, es necesario guardar el archivo en uno de los
directorios especificados en la ruta de clases o en un subdirectorio de ésta. (Si lo desea, puede
modificar la ruta de clases de forma que incluya la ruta de directorio deseada). De lo contrario,
Flash no podrá resolver, es decir, localizar la clase o interfaz especificada en el script. Los
subdirectorios que se crean dentro de un directorio de rutas de clases se denominan paquetes y
permiten organizar las clases. (Para más información sobre paquetes, consulte “Creación y
empaquetado de archivos de clases” en la página 236.)
Flash tiene dos tipos de rutas de clases: una ruta de clases global y una ruta de clases de
documento. La ruta de clases global es una ruta de clases que comparten todos los documentos
de Flash. La ruta de clases de documento es una ruta de clases que se define específicamente
para un único documento de Flash.
La ruta de clases global se aplica a los archivos externos ActionScript y FLA y se configura en
el cuadro de diálogo Preferencias (Edición > Preferencias (Windows) o Flash > Preferencias
(Macintosh), seleccione ActionScript de la lista Categoría y haga clic en Configuración de
ActionScript 2.0). Puede establecer la ruta de clases de documento en el cuadro de diálogo
Configuración de publicación del documento de Flash (Archivo > Configuración de
publicación, seleccione Flash y haga clic en el botón Configuración).
Al hacer clic en el botón Revisar sintaxis situado encima del panel Script mientras se
N OT A
edita un archivo ActionScript, el compilador sólo consulta la ruta de clases global. Los
archivos ActionScript no están asociados a archivos FLA en modo de edición y carecen
de ruta de clases propia.
obtener acceso a clases incorporadas. Si elimina por error esta ruta de clases,
restáurela añadiendo $(LocalData)/Classes como nueva ruta de clases.
La parte de ruta relativa de la ruta de clases global se expresa mediante un solo punto (.) y
señala al directorio de documentos actual. Tenga en cuenta que las rutas de clases relativas
pueden señalar a distintos directorios, según la ubicación del documento que se está
compilando o publicando.
Puede seguir estos pasos para añadir una ruta de clases global o editar una ruta de clases
existente.
No elimine la ruta de clases global absoluta. Flash utiliza esta ruta de clases para
N OT A
obtener acceso a clases incorporadas. Si elimina por error esta ruta de clases, puede
restaurarla añadiendo $(LocalData)/Classes como nueva ruta de clases.
212 Clases
Utilización de una ruta de clases de documento
La ruta de clases de documentos sólo es aplicable a archivos FLA. La ruta de clases de
documento se establece en el cuadro de diálogo Configuración de publicación para un archivo
FLA concreto (Archivo > Configuración de publicación, haga clic en la ficha Flash y
seleccione Configuración de ActionScript 2.0). De forma predeterminada, la ruta de clases de
documentos está vacía. Al crear un archivo FLA en un directorio, dicho directorio se convierte
en un directorio designado de ruta de clases.
Al crear clases, es posible que algunas veces desee almacenarlas en un directorio que
posteriormente pueda añadir a la lista de directorios de ruta de clases global en los siguientes
casos:
■ Si dispone de un conjunto de clases de utilidad que utilizan todos sus proyectos
■ Si desea revisar la sintaxis del código (haga clic en el botón Revisar sintaxis) dentro del
archivo ActionScript externo
La creación de un directorio evita la pérdida de clases personalizadas si alguna vez desinstala
Flash y vuelve a instalarlo, especialmente si se elimina o sobrescribe el directorio
predeterminado de la ruta de clases global, ya que perdería todas las clases almacenadas en
dicho directorio.
Por ejemplo, podría crear un directorio como el siguiente para sus clases personalizadas:
■ Windows: Disco duro\Documents and Settings\usuario\clases personalizadas.
■ Macintosh: Disco duro/Users/usuario/clases personalizadas.
Posteriormente, añadiría esta ruta a la lista de rutas de clases globales (consulte “Utilización de
una ruta de clases global” en la página 211).
Cuando Flash intenta resolver referencias de clases en un script FLA, primero busca la ruta de
clases del documento especificada para dicho archivo FLA. Si Flash no encuentra la clase en
esa ruta de clases o ésta está vacía, la busca en la ruta de clases global. Si Flash no encuentra la
clase en la ruta de clases global, se produce un error de compilador.
rutas de clases, haga clic en el botón Buscar ruta, busque el directorio que desee
añadir y haga clic en Aceptar.
En algunos casos, no es necesario crear una instancia de una clase para utilizar sus
N O TA
214 Clases
Utilice el operador de punto (.) para acceder al valor de una propiedad en una instancia.
Escriba el nombre de la instancia a la izquierda del punto y el nombre de la propiedad en el
lado derecho. Por ejemplo, en la siguiente sentencia, firstUser es la instancia y username es
la propiedad:
firstUser.username
También puede utilizar las clases de nivel superior o las clases incorporadas que conforman el
lenguaje ActionScript en un documento de Flash. Por ejemplo, el siguiente código crea un
nuevo objeto Array y luego muestra su propiedad length:
var myArray:Array = new Array("apples", "oranges", "bananas");
trace(myArray.length); // 3
Para más información sobre el uso de clases personalizadas en Flash, consulte “Ejemplo:
Utilización de archivos de clases personalizadas en Flash” en la página 248. Para obtener
información sobre la función constructora, consulte “Escritura de la función constructora” en
la página 239.
En el siguiente ejemplo se muestra cómo escribir una clase personalizada Picture que contenga
diversos datos sobre una foto.
class Picture {
private var __infoObj:Object;
216 Clases
3. Guarde el archivo de ActionScript.
4. Seleccione Archivo > Nuevo y haga clic en Documento de Flash para crear un nuevo
archivo FLA. Guárdelo como picture_test.fla en el mismo directorio en el que guardó el
archivo de clase Picture.
5. Escriba el siguiente código ActionScript en el fotograma 1 de la línea de tiempo:
var picture1:Picture = new Picture("http://www.helpexamples.com/flash/
images/image1.jpg");
picture1.showInfo();
this.createEmptyMovieClip("img_mc", 9);
img_mc.loadMovie(picture1.src);
Un archivo de ejemplo en su disco duro muestra la forma de crear un menú dinámico con
datos XML y un archivo de clase personalizado. El ejemplo llama al constructor XmlMenu() de
ActionScript y le pasa dos parámetros: la ruta al archivo de menú XML y una referencia a la
línea de tiempo actual. El resto de la funcionalidad reside en un archivo de clase
personalizado, XmlMenu.as.
El archivo de origen de muestra, xmlmenu.fla, se puede encontrar en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/XML_Menu.
Si desea añadir una propiedad public, utilice la palabra “public” en lugar de “private”, como
puede observarse en el siguiente código de muestra:
class Sample {
private var ID:Number;
public var email:String;
public function myMethod():Void {
trace("myMethod");
}
}
Dado que la propiedad email es pública, puede cambiarla dentro de la clase Sample o
directamente dentro de un FLA.
218 Clases
Métodos y propiedades privados
La palabra clave private especifica que una variable o función está únicamente disponible
para la clase que la declara o define o para las subclases de dicha clase. De manera
predeterminada, una variable o función es pública y está disponible para cualquier origen de
llamada. Utilice la palabra clave this si desea restringir el acceso a una variable o función,
como puede observarse en el siguiente ejemplo:
class Sample {
private var ID:Number;
public function myMethod():Void {
this.ID = 15;
trace(this.ID); // 15
trace("myMethod");
}
}
Si desea añadir una propiedad privada a la clase anterior, simplemente deberá usar la palabra
clave private antes de la palabra clave var.
Si intenta acceder a la propiedad privada ID desde fuera de la clase Sample, obtendrá un error
de compilación y un mensaje en el panel Salida. El mensaje indica que el miembro es privado
y no permite el acceso.
Si escribe sólo esta línea de código en el panel Script del panel Acciones, se ve la sentencia
trace resultante en el panel Salida.
Cada vez que crea una instancia nueva de la clase Sample, el método constructor traza el
número total de instancias de clase Sample definidas hasta el momento.
Algunas de las clases de ActionScript del más alto nivel tienen miembros de clase (o miembros
estáticos), como ya hemos visto anteriormente en esta sección al llamar a la propiedad
Math.PI. Se accede o se invoca a los miembros de clase (propiedades y métodos) desde el
propio nombre de la clase, no desde una instancia de la misma. Por consiguiente, no se crea
una instancia de la clase para utilizar estas propiedades y métodos.
Por ejemplo, la clase Math del más alto nivel consta sólo de propiedades y métodos estáticos.
Para llamar a cualquiera de sus métodos, no debe crear una instancia de la clase Math. En su
lugar, simplemente llame a los métodos en la propia clase Math. El siguiente código llama al
método sqrt() de la clase Math:
var squareRoot:Number = Math.sqrt(4);
trace(squareRoot); // 2
El código siguiente invoca el método max() de la clase Math, que determina, entre dos
números, cuál de ellos es el mayor:
var largerNumber:Number = Math.max(10, 20);
trace(largerNumber); // 20
Para más información sobre la creación de miembros de clases, consulte “Miembros de clase”
en la página 221 y “Utilización de miembros de clase” en la página 224.
Un archivo de ejemplo en su disco duro muestra la forma de crear un menú dinámico con
datos XML y un archivo de clase personalizado. El ejemplo llama al constructor XmlMenu() de
ActionScript y le pasa dos parámetros: la ruta al archivo de menú XML y una referencia a la
línea de tiempo actual. El resto de la funcionalidad reside en un archivo de clase
personalizado, XmlMenu.as.
220 Clases
El archivo de origen de muestra, xmlmenu.fla, se puede encontrar en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/XML_Menu.
Miembros de clase
La mayoría de los miembros (métodos y propiedades) descritos hasta ahora en este capítulo
son de un tipo denominado miembros de instancias. Por cada miembro de instancia, existe una
copia exclusiva de dicho miembro en cada instancia de la clase. Por ejemplo, la variable de
miembro email de la clase Sample tiene un miembro de instancia, porque cada persona tiene
una dirección de correo electrónico diferente.
Otro tipo de miembro es un miembro de clase. Sólo hay una copia de un miembro de clase,
que se utiliza para toda la clase. Todas las variables declaradas dentro de una clase, pero fuera
de una función, son propiedades de la clase. En el siguiente ejemplo, la clase Person tiene dos
propiedades, age y username, de tipo Number y String, respectivamente:
class Person {
public var age:Number;
public var username:String;
}
Asimismo, todas las funciones declaradas dentro de una clase se consideran un método de la
clase. En el ejemplo de la clase Person, puede crear un método denominado getInfo():
class Person {
public var age:Number;
public var username:String;
public function getInfo():String {
// Definición del método getInfo()
}
}
En el fragmento de código anterior, el método getInfo() de la clase Person, así como las
propiedades age y username, son miembros de instancia públicos. La propiedad age no sería
un buen miembro de clase, dado que cada persona tiene una edad diferente. Sólo deberían ser
miembros de clase las propiedades y métodos compartidos por todos los individuos de la clase.
Supongamos que desea que todas las clases tengan una variable species que indique el nombre
latino de cada especie a la que representa la clase. Por cada objeto Person, la especie es Homo
sapiens. Sería un despilfarro almacenar una copia exclusiva de la cadena "Homo sapiens" por
cada instancia de la clase, por lo que este miembro debe ser un miembro de clase.
También puede declarar métodos de una clase para que sean estáticos, como se muestra en el
siguiente código:
public static function getSpecies():String {
return Person.species;
}
Los métodos estáticos sólo pueden acceder a las propiedades estáticas, no a las propiedades de
instancia. Por ejemplo, el siguiente código provoca un error de compilador porque el método
de la clase getAge() hace referencia a la variable de instancia age:
class Person {
public var age:Number = 15;
// ...
public static function getAge():Number {
return age; /* **Error**: No se puede acceder a variables de instancia
en funciones estáticas. */
}
}
Para resolver este problema, podría hacer que el método fuera un método de instancia o hacer
que la variable fuera una variable de clase.
Para más información sobre los miembros de clase (también denominados propiedades
estáticas), consulte “Métodos y propiedades estáticos” en la página 219.
Un archivo de ejemplo en su disco duro muestra la forma de crear un menú dinámico con
datos XML y un archivo de clase personalizado. El ejemplo llama al constructor XmlMenu() de
ActionScript y le pasa dos parámetros: la ruta al archivo de menú XML y una referencia a la
línea de tiempo actual. El resto de la funcionalidad reside en un archivo de clase
personalizado, XmlMenu.as.
El archivo de origen de muestra, xmlmenu.fla, se puede encontrar en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_Menu.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/XML_Menu.
222 Clases
Utilización del patrón de diseño Singleton
Una forma habitual de usar miembros de clase es con el patrón de diseño Singleton. Un patrón
de diseño define un enfoque formal a la hora de estructurar el código. Normalmente, podría
estructurar un patrón de diseño como solución para un problema de programación común.
Existen muchos patrones de diseño establecidos, como Singleton. El patrón de diseño
Singleton garantiza que una clase tenga sólo una instancia y ofrece una forma de acceder
globalmente a la instancia. Para obtener información detallada sobre el patrón de diseño
Singleton, consulte www.macromedia.com/devnet/mx/coldfusion/articles/
design_patterns.html.
Muchas veces hay situaciones en las que necesita un objeto exactamente de un tipo concreto
en un sistema. Por ejemplo, en un juego de ajedrez sólo hay un tablero, al igual que en cada
país sólo hay una capital. Aunque sólo haya un objeto, debe encapsular la funcionalidad de
este objeto en una clase. Sin embargo, puede que necesite administrar y acceder a la única
instancia de dicho objeto. Puede hacerlo empleando una variable global, aunque las variables
globales no suelen ser muy convenientes para la mayoría de los proyectos. Un enfoque más
adecuado consiste en hacer que la clase administre la única instancia del objeto en sí misma
empleando miembros de clase. En el siguiente ejemplo se muestra el uso de un patrón de
diseño Singleton típico, donde la instancia Singleton se crea sólo una vez.
class Singleton {
private static var instance:Singleton = null;
public function trackChanges():Void {
trace("tracking changes.");
}
public static function getInstance():Singleton {
if (Singleton.instance == null) {
trace("creating new Singleton.");
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
224 Clases
Para crear un contador de instancias mediante una variable de clase:
1. Seleccione Archivo > Nuevo, elija Archivo ActionScript y haga clic en Aceptar.
2. Escriba el siguiente código en la ventana Script:
class Widget {
//Inicialice la variable de clase
public static var widgetCount:Number = 0;
public function Widget() {
Widget.widgetCount++;
trace("Creating widget #" + Widget.widgetCount);
}
}
La variable widgetCount se declara como estática y, por lo tanto, sólo se inicializa a 0 una
vez. Cada vez que se llama a la sentencia constructora de la clase Widget, se añade 1 a
widgetCount y luego se muestra el número de la instancia actual que se está creando.
3. Guarde el archivo como Widget.as.
4. Seleccione Archivo > Nuevo y elija Documento de Flash para crear un nuevo archivo FLA.
Guárdelo como widget_test.fla en el mismo directorio que Widget.as.
5. En widget_test.fla, escriba el siguiente código en el fotograma 1 de la línea de tiempo:
// Antes de crear instancias de la clase,
// Widget.widgetCount es cero (0).
trace("Widget count at start: " + Widget.widgetCount); // 0
var widget1:Widget = new Widget(); // 1
var widget2:Widget = new Widget(); // 2
var widget3:Widget = new Widget(); // 3
trace("Widget count at end: " + Widget.widgetCount); // 3
En lugar de permitir que las instancias de la clase accedan directamente a esta propiedad (por
ejemplo, user.userName = "Buster"), la clase puede utilizar dos métodos, getUserName()
y setUserName(), que se implementarían como se muestra en el siguiente ejemplo.
226 Clases
Para utilizar los métodos getter y setter:
1. Seleccione Archivo > Nuevo, elija Archivo ActionScript y haga clic en Aceptar.
2. Escriba el siguiente código en la ventana Script:
class Login {
private var __username:String;
public function Login(username:String) {
this.__username = username;
}
public function getUserName():String {
return this.__username;
}
public function setUserName(value:String):Void {
this.__username = value;
}
}
Sin embargo, si desea utilizar una sintaxis más concisa, puede utilizar métodos getter y setter
implícitos. Los métodos getter y setter implícitos permiten acceder directamente a las
propiedades de clases a la vez que siguen las recomendaciones de la programación orientada a
objetos (OOP).
228 Clases
6. Guarde el documento de Flash y seleccione Control > Probar película para probar el
archivo.
Flash muestra la siguiente información en el panel Salida:
RickyM
EnriqueI
de interfaz.
Clases dinámicas
Al añadir la palabra clave dynamic a una definición de clase, se especifica que los objetos
basados en la clase especificada pueden añadir y acceder a las propiedades dinámicas en
tiempo de ejecución. Sólo debe crear clases dinámicas si necesita esta funcionalidad
específicamente.
La verificación de tipos en clases dinámicas es menos estricto que en clases no dinámicas
porque los miembros a los que se accede dentro de la definición de clase y en instancias de la
clase no se comparan con los definidos en el ámbito de la clase. Sin embargo, pueden
verificarse los tipos return y parameter de las funciones de miembros de clase.
Para obtener información sobre la creación de clases dinámicas, consulte “Creación de clases
dinámicas” en la página 229.
Si en otro script se crea una instancia de la clase Person y se intenta acceder a una
propiedad de la clase que no existe, el compilador generará un error.
3. Guarde el archivo en el disco duro como Person.as.
Este código ActionScript añade la palabra clave dynamic a la clase Person en el ejemplo
anterior. Las instancias de la clase Person2 pueden añadir y acceder a las propiedades y
métodos no definidos en esta clase.
4. Guarde los cambios en el archivo ActionScript.
5. Seleccione Archivo > Nuevo, elija Documento de Flash para crear un nuevo archivo FLA
y luego haga clic en Aceptar.
230 Clases
6. Seleccione Archivo > Guardar como y asigne al nuevo archivo el nombre person2_test.fla.
Guárdelo en el mismo directorio que Person2.as.
7. Añada el siguiente código para crear una nueva instancia de la clase Person2 (firstPerson)
y asigne un valor a una propiedad denominada hairColor (que no existe en la clase
Person2).
var firstPerson:Person2 = new Person2();
firstPerson.hairColor = "blue";
trace(firstPerson.hairColor); // blue (azul)
Para más información sobre subclases, consulte el Capítulo 7, “Herencia”, en la página 275.
232 Clases
Utilización de la palabra clave this en clases
Utilice la palabra clave this como prefijo dentro de las clases para métodos y variables de
miembros. Aunque no es necesaria, la palabra clave this hace que resulte sencillo saber que
una propiedad o método pertenece a una clase cuando tiene un prefijo; sin la palabra clave, no
es posible determinar si la propiedad o el método pertenece a la superclase.
También es posible utilizar un prefijo de nombre de clase en variables estáticas y métodos, e
incluso en una clase. Esto ayuda a completar las referencias que se crean, lo que mejora la
legibilidad del código. En función del entorno de codificación que utilice, la adición de
prefijos también podría accionar sugerencias para el código.
Macromedia recomienda añadir la palabra clave this como prefijo, ya que puede facilitar
la legibilidad y ayudarle a escribir un código limpio al proporcionar contexto para los
métodos y variables.
Recuerde: sólo puede definir clases en archivos ActionScript. Por ejemplo, no puede definir
una clase en un script de fotograma en un archivo FLA. Por consiguiente, debe crear un nuevo
archivo para este ejemplo.
234 Clases
Directrices generales para la creación de una clase
Los siguientes puntos son directrices que deberá seguir al escribir archivos de clases
personalizadas. Le ayudarán a escribir clases correctas y bien formadas. Podrá practicar estas
directrices en los ejemplos siguientes.
■ En general, incluya una sola declaración por línea y no coloque la misma declaración o
distintos tipos de declaración en una sola línea. Aplique formato a las declaraciones como
se muestra en el siguiente ejemplo:
private var SKU:Number; // número de SKU (identificación) del producto
private var quantity:Number; // cantidad del producto
■ Inicialice las variables locales al declararlas, a menos que el valor inicial se determine
mediante un cálculo. Para más información sobre la inicialización de variables, consulte
“Adición de métodos y propiedades” en la página 241.
■ Declare las variables antes de utilizarlas por primera vez (incluidos los bucles). Por
ejemplo, el siguiente código establece una declaración previa de la variable de repetidor de
bucle (i) antes de utilizarla en el buclefor:
var my_array:Array = new Array("one", "two", "three");
var i:Number;
for (i = 0 ; i < my_array.length; i++) {
trace(i + " = " + my_array[i]);
}
■ Evite utilizar declaraciones locales que oculten declaraciones de nivel superior. Por
ejemplo, no declare una variable dos veces, como se muestra en el siguiente ejemplo:
// código incorrecto
var counter:Number = 0;
function myMethod() {
var counter:Number;
for (counter = 0; counter <= 4; counter++) {
// sentencias;
}
}
o bien
// forma incorrecta
class User {
private var m_username:String, m_password:String;
}
En la siguiente sección asignará nombre y creará una definición de clase. Consulte la sección
“Creación y empaquetado de archivos de clases” en la página 236 para crear, asignar nombre y
empaquetar archivos de clase. Para más información sobre la asignación de nombre a archivos
de clases, consulte “Asignación de nombre a clases y objetos” en la página 784.
236 Clases
Al crear un archivo de clase, decida dónde desea guardar el archivo. En los siguientes pasos,
guardará el archivo de clase y el archivo FLA de la aplicación que utiliza el archivo de clase en
el mismo directorio para mayor simplicidad. No obstante, si desea comprobar la sintaxis,
también tendrá que indicar a Flash cómo encontrar el archivo. Generalmente, al crear una
aplicación, tendría que añadir el directorio en el que están guardados la aplicación y los
archivos de clase en la ruta de clases de Flash. Para más información sobre rutas de clases,
consulte “Configuración y modificación de la ruta de clases” en la página 211.
Los archivos de clases también se denominan archivos ActionScript (AS). Los archivos AS se
crean en la herramienta de edición de Flash o mediante un editor externo. Hay varios editores
externos, como Macromedia Dreamweaver y Macromedia Flex Builder, que permiten crear
archivos AS.
El nombre de la clase (ClassA) debe coincidir exactamente con el nombre del archivo
NO T A
AS que la contiene (ClassA.as). Esto es sumamente importante, puesto que si estos dos
nombres no coinciden, incluidas mayúsculas y minúsculas, la clase no se compilará.
Por este motivo, es aconsejable planificar una estructura de paquete antes de empezar a crear
clases. De otro modo, si decide mover archivos de clases después de crearlos, deberá modificar
las sentencias de declaración de clases para reflejar su nueva ubicación.
238 Clases
2. Cree la estructura de directorios que sea necesaria, una vez elegido el nombre del paquete.
Por ejemplo, si el paquete se llama com.macromedia.utils, deberá crear la estructura de
directorios com/macromedia/utils y colocar las clases en la carpeta utils.
3. Utilice el prefijo com.macromedia.utils para cualquier clase que cree en este paquete.
Por ejemplo, si el nombre de la clase fuera ClassA, el nombre de clase completo tendría
que ser com.macromedia.utils.ClassA dentro del archivo de clase com/macromedia/
utils/ClassA.as.
4. Si cambia la estructura del paquete en un momento posterior, recuerde que no sólo deberá
modificar la estructura de directorios, sino también el nombre del paquete dentro de cada
archivo de clase, además de todas las sentencias de importación o referencias a una clase
contenida en dicho paquete.
Para continuar escribiendo archivos de clases, consulte “Escritura de la función constructora”
en la página 239.
declaraciones.
Los constructores son funciones que se utilizan para inicializar (definir) las propiedades y
métodos de una clase. Por definición, los constructores son funciones incluidas en
definiciones de clases que tienen el mismo nombre que la clase. Por ejemplo, el código
siguiente define una clase Person e implementa una función constructora. En OOP, la función
constructora inicializa cada instancia nueva de una clase.
El constructor de una clase es una función especial a la que se llama automáticamente cuando
se crea una instancia de una clase mediante el operador new. La función constructora tiene el
mismo nombre que la clase que la contiene. Por ejemplo, la clase Person que se creó contenía
la función constructora siguiente:
//Función constructora de la clase Person
public function Person (uname:String, age:Number) {
this.__name = uname;
this.__age = age;
}
la página 233. Si no desea seguir todos los pasos del ejercicio, puede descargar los
archivos de clase en www.helpexamples.com/flash/learnas/classes/.
El código anterior define un método constructor para la clase ClassA. Este constructor
traza una cadena sencilla en el panel Salida que le permitirá saber cuándo se ha creado una
nueva instancia de la clase.
3. Abra la clase ClassB.as en la herramienta de edición de Flash.
4. Modifique el archivo de clase existente para que coincida con el siguiente código (los
cambios para realizar aparecen en negrita):
class com.macromedia.utils.ClassB {
function ClassB() {
trace("ClassB constructor");
}
}
240 Clases
5. Guarde ambos archivos ActionScript antes de continuar.
Para continuar escribiendo el archivo de clase, consulte “Adición de métodos y propiedades”
en la página 241.
personalizadas” en la página 233. Si no desea seguir todos los pasos del ejercicio,
puede descargar los archivos de clase en www.helpexamples.com/flash/learnas/
classes/.
El bloque de código anterior añade una única variable estática, _className, que contiene
el nombre de la clase actual.
3. Modifique la clase ClassB y añada la variable estática de manera que sea igual al código
anterior.
4. Guarde ambos archivos ActionScript antes de continuar.
Por convención, las propiedades de clases se definen en la parte superior del cuerpo
S UG E R E N CI A
de la clase. Su definición en la parte superior hace que el código resulte más fácil de
entender, aunque no es imprescindible.
function ClassA() {
trace("ClassA constructor");
}
function doSomething():Void {
trace("ClassA - doSomething()");
}
}
El bloque de código en negrita crea un nuevo método en la clase que traza una cadena en
el panel Salida.
3. En ClassA.as, seleccione Herramientas > Revisar sintaxis para revisar la sintaxis del archivo
ActionScript.
Si se indica algún error en el panel Salida, compare el código ActionScript de su script con
el código completo escrito en el paso anterior. Si no puede resolver los errores del código,
copie y pegue el código completo en la ventana Script antes de continuar.
242 Clases
4. Revise la sintaxis de ClassB.as como lo hizo con ClassA.as.
Si aparecen errores en el panel Salida, copie y pegue el código completo en la ventana
Script antes de continuar:
class com.macromedia.utils.ClassB {
static var _className:String;
function ClassB() {
trace("ClassB constructor");
}
function doSomething():Void {
trace("ClassB - doSomething()");
}
}
function ClassA() {
trace("ClassA constructor");
}
function doSomething():Void {
trace("ClassA - doSomething()");
}
}
La única diferencia entre el archivo de clase existente y el bloque de código anterior es que
ahora hay un valor definido para la variable estática _className, “ClassA”.
Al inicializar matrices en línea, sólo se crea una matriz para todas las instancias de la
NO T A
clase.
Para continuar escribiendo el archivo de clase, consulte “Control del acceso de miembros en
las clases” en la página 244.
Los miembros privados (propiedades y métodos) son accesibles sólo para la clase que define dichos
miembros y las subclases de esa clase original. Las instancias de la clase original o las de las subclases
de dicha clase no pueden acceder de forma privada a propiedades y métodos declarados; es decir,
los miembros privados son accesibles sólo dentro de las definiciones de clase, no en el nivel de la
instancia. En el siguiente ejemplo, cambiará el acceso de los miembros en los archivos de clases.
la página 233. Si no desea seguir todos los pasos del ejercicio, puede descargar los
archivos de clase en www.helpexamples.com/flash/learnas/classes/.
244 Clases
Para controlar el acceso de los miembros:
1. Abra ClassA.as y ClassB.as en la herramienta de edición de Flash.
2. Modifique el archivo ActionScript ClassA.as para que su contenido coincida con el
siguiente código ActionScript (los cambios para realizar aparecen en negrita):
class com.macromedia.utils.ClassA {
private static var _className:String = "ClassA";
ActionScript 2.0. Sin embargo, constituyen una forma frecuente de estructurar los
comentarios de un archivo de clase que puede utilizar en los archivos AS.
No incluya comentarios que no estén directamente relacionados con la clase que se está
N OT A
la página 233. Si no desea seguir todos los pasos del ejercicio, puede descargar los
archivos de clase en www.helpexamples.com/flash/learnas/classes/.
246 Clases
Para documentar los archivos de clases:
1. Abra ClassA.as y ClassB.as en la herramienta de edición de Flash.
2. Modifique el archivo de clase ClassA y añada el nuevo código en la parte superior del
archivo de clase (los cambios para realizar aparecen en negrita):
/**
ClassA class
version 1,1
6/21/2005
copyright Macromedia, Inc.
*/
class com.macromedia.utils.ClassA {
private static var _className:String = "ClassA";
248 Clases
También puede utilizar el nombre de clase completo para introducir las variables, como se
muestra en el siguiente ejemplo:
var myInstance:com.macromedia.docs.learnAs2.ClassName = new
com.macromedia.docs.learnAs2.ClassName();
Puede utilizar la sentencia import para importar paquetes a un script, lo que le permitirá utilizar
un nombre abreviado de clase en lugar de su nombre completo. También puede utilizar el
carácter comodín (*) para importar todas las clases de un paquete. Si utiliza el carácter comodín,
no tendrá que utilizar el nombre de clase completo cada vez que utilice la clase.
Supongamos, por ejemplo, que ha importado clase anterior en un script utilizando la
sentencia import, como se muestra en el siguiente ejemplo:
import com.macromedia.docs.learnAs2.util.UserClass;
Posteriormente, en el mismo script, podría hacer referencia a dicha clase mediante su nombre
abreviado, como se muestra en el siguiente ejemplo:
var myUser:UserClass = new UserClass();
También puede utilizar el carácter comodín (*) para importar todas las clases de un paquete
determinado. Supongamos, por ejemplo, que tiene un paquete llamado
com.macromedia.utils que contiene dos archivos de clases ActionScript, ClassA.as y
ClassB.as. En otro script, podría importar ambas clases de dicho paquete mediante el carácter
comodín, como se muestra en el siguiente código:
import com.macromedia.utils.*;
La sentencia import sólo se aplica al script actual (fotograma u objeto) en el que se llama. Si
una clase importada no se utiliza en un script, no se incluirá en el código de bytes del archivo
SWF resultante ni estará disponible para los archivos SWF que pueda cargar el archivo FLA
que contiene la sentencia import.
El bloque de código anterior comienza por importar cada una de las clases del paquete
com.macromedia.utils utilizando el carácter comodín (*). A continuación, debe crear
una nueva instancia de la clase ClassA, lo que provocará que el método constructor trace
un mensaje en el panel Salida. También se crea una instancia de la clase ClassB, que envía
mensajes de depuración al panel Salida.
3. Guarde los cambios en el documento de Flash antes de continuar.
Para continuar utilizando estos archivos de clases en un archivo de Flash, consulte “Creación
de instancias de clases en un ejemplo” en la página 250.
250 Clases
Para crear una nueva instancia de las clases ClassA y ClassB:
1. Abra el archivo denominado package_test.fla.
2. Escriba el siguiente código en negrita en la ventana Script:
import com.macromedia.utils.*;
var a:ClassA = new ClassA(); // constructor de ClassA
a.doSomething(); // llamar al método doSomething() de ClassA
var b:ClassB = new ClassB(); // constructor de ClassB
b.doSomething(); // llamar al método doSomething() de ClassB
Introducir los datos de los objetos en este ejemplo de código permite al compilador
asegurarse de que no se intenta acceder a las propiedades o los métodos que no están
definidos en la clase personalizada. Para más información sobre “strict data typing”,
consulte “Asignación de tipos de datos y “strict data typing”” en la página 337. La
excepción a la escritura de datos de los objetos es si la clase se declara como dinámica con
la palabra clave dynamic. Consulte “Creación de clases dinámicas” en la página 229.
3. Guarde los cambios en el archivo FLA antes de continuar.
Ahora debería tener una idea general de cómo crear y utilizar las clases en los documentos de
Flash. Recuerde que también puede crear instancias de clases de nivel superior o incorporadas
en ActionScript (consulte “Utilización de clases incorporadas” en la página 269).
Para continuar utilizando estos archivos de clases en un archivo de Flash, consulte “Asignación
de una clase a símbolos en Flash” en la página 251.
Este código ActionScript crea una nueva clase denominada Animal que tiene un método
constructor que traza una cadena en el panel Salida.
252 Clases
Compilación y exportación de clases
De forma predeterminada, las clases utilizadas por un archivo SWF se empaquetan y exportan
en el primer fotograma del archivo SWF. También puede especificar un fotograma diferente
en el que se empaquetan y exportan las clases. Esto es útil, por ejemplo, si un archivo SWF
utiliza muchas clases que necesitan bastante tiempo para descargarse (por ejemplo,
componentes). Si las clases se exportan en el primer fotograma, el usuario deberá esperar hasta
que todo el código de clase se haya descargado para que aparezca el fotograma. Al especificar
un fotograma posterior en la línea de tiempo, se puede visualizar una breve animación de
carga en los primeros fotogramas de la línea de tiempo mientras se descarga el código de clase
del fotograma posterior.
254 Clases
El compilador crea archivos ASO con el fin de generar cachés. Puede que observe que la
primera compilación es más lenta que las compilaciones posteriores. Esto se debe a que sólo se
recompilan en los archivos ASO los archivos AS que han cambiado. En el caso de los archivos
AS que no han cambiado, el compilador lee directamente el código de bytes ya compilado del
archivo ASO en lugar de volver a compilar el archivo AS.
El formato de archivo ASO es un formato intermedio desarrollado para uso interno
exclusivamente. No es un formato de archivo documentado, ya que no está pensado para su
redistribución.
Si experimenta problemas en los que parezca que Flash está compilando versiones anteriores
de un archivo que ha editado, elimine los archivos ASO y vuelva a compilarlos. Si va a
eliminar archivos ASO, elimínelos cuando Flash no esté realizando otras operaciones, como la
revisión de sintaxis o la exportación de archivos SWF.
256 Clases
Dado que se intenta hacer referencia a la variable de miembro privada de un controlador
onLoad, la palabra clave this realmente hace referencia a la instancia prodXml y no a la
clase Product, que es lo que podría esperarse. Por este motivo, debe crear un puntero al
archivo de clase local para que pueda hacer referencia a la clase directamente desde el
controlador onLoad. Ahora puede utilizar esta clase con un documento de Flash.
3. Guarde el código ActionScript anterior como Product.as.
4. Cree un nuevo documento de Flash denominado testProduct.fla en el mismo directorio.
5. Seleccione el fotograma 1 de la línea de tiempo principal.
6. Introduzca el siguiente código ActionScript en el panel Acciones:
var myProduct:Product = new Product("http://www.helpexamples.com/
crossdomain.xml");
7. Seleccione Control > Probar película para comprobar este código en el entorno de prueba.
El contenido del documento XML especificado aparece en el panel Salida.
Otro tipo de ámbito que puede encontrar al utilizar estas clases son las variables estáticas y las
funciones estáticas. La palabra clave static especifica que una variable o función se crea
únicamente una vez por cada clase, en lugar de crearse en cada instancia de dicha clase. Puede
acceder a un miembro de clase estático sin crear una instancia de la clase utilizando la sintaxis
someClassName.username. Para más información sobre variables y funciones estáticas,
consulte “Métodos y propiedades (miembros) públicos, privados y estáticos” en la página 217
y “Utilización de miembros de clase” en la página 224.
Otra ventaja que aportan las variables estáticas es que no pierden su valor después de finalizar
el ámbito de la variable. En el siguiente ejemplo se muestra cómo utilizar la palabra clave
static para crear un contador que rastrea el número de instancias de la clase Flash que se han
creado. Dado que la variable numInstances es estática, la variable se crea una sola vez para
toda la clase, no una vez por cada instancia individual.
La primera línea de código llama al método getter (captador) estático instances(), que
devuelve el valor de la variable privada estática numInstances. El resto del código crea
nuevas instancias de la clase User y muestra el valor actual devuelto por el método getter
instances().
6. Seleccione Control > Probar película para probar los documentos.
Para más información sobre el uso de la palabra clave this en las clases, consulte “Utilización
de la palabra clave this en clases” en la página 233.
258 Clases
Las clases de nivel superior, enumeradas en “Clases de nivel superior” en la página 261, están
escritas en Flash Player. En la caja de herramientas Acciones, estas clases se encuentran en el
directorio Clases de ActionScript 2.0. Algunas de las clases de nivel superior están basadas en
la especificación del lenguaje ECMAScript (ECMA-262) edición 3 y se conocen como clases
principales de ActionScript. Entre ellas se incluyen las clases Array, Boolean, Date y Math. Para
más información sobre paquetes, consulte “Utilización de paquetes” en la página 199.
Dispone de clases de ActionScript instaladas en el disco duro. Puede encontrar las carpetas de
clases aquí:
■ Windows: Disco duro\Documents and Settings\usuario\Configuración local\Datos de
programa\Macromedia\Flash 8\idioma\Configuration\Classes.
■ Macintosh: Disco duro/Users/usuario/Library/Application Support/Macromedia/Flash 8/
idioma/Configuration/Classes.
Consulte el documento Readme ubicado en este directorio para obtener más información
sobre su estructura.
Para comprender la distinción que existe entre las clases principales de ActionScript y las clases
específicas de Flash, tenga en cuenta la distinción entre las clases JavaScript principales y las de
la parte del cliente. Las clases JavaScript de la parte del cliente controlan el entorno del cliente
(el contenido de la página Web y el navegador Web), mientras que las clases específicas de
Flash controlan el aspecto y el comportamiento de una aplicación Flash en tiempo de
ejecución.
El resto de las clases incorporadas de ActionScript son específicas de Macromedia Flash y del
modelo de objetos de Flash Player. Ejemplos de estas clases son Camera, MovieClip y
LoadVars. Otras clases están organizadas en paquetes, como flash.display. Todas estas clases se
denominan a veces clases incorporadas (clases predefinidas que puede utilizar para añadir
funcionalidad a las aplicaciones).
En las siguientes secciones se presentan las clases de ActionScript incorporadas y se describen
las tareas fundamentales que se realizan con este tipo de clases. Para obtener información
general sobre cómo utilizar las clases y los objetos en un entorno de programación orientada a
objetos, consulte “Utilización de clases incorporadas” en la página 269. Los ejemplos de
código que utilizan estas clases se incluyen en todo el manual Aprendizaje de ActionScript 2.0
en Flash.
Para obtener información sobre elementos del lenguaje (como constantes, operadores y directivas),
consulte el Capítulo 4, “Principios básicos de la sintaxis y el lenguaje”, en la página 75.
260 Clases
Clases de nivel superior
En el nivel superior se incluyen las clases y funciones globales de ActionScript, muchas de las
cuales proporcionan funcionalidad básica para las aplicaciones. Entre las clases principales,
tomadas directamente de ECMAScript, se encuentran Array, Boolean, Date, Error, Function,
Math, Number, Object, String y System. Para más información sobre cada clase, consulte la
siguiente tabla.
Flash.
Clase Descripción
Accessibility La clase Accessibility gestiona la comunicación entre los archivos
SWF y las aplicaciones de lectura en pantalla. Los métodos de esta
clase se utilizan con la propiedad _accProps global para controlar las
propiedades accesibles de los clips de película, los botones y los
campos de texto en tiempo de ejecución. Véase Accessibility.
Boolean Esta clase es un envolvente para los valores booleanos (true o false).
Véase Boolean.>.
262 Clases
Clase Descripción
Microphone La clase Microphone proporciona acceso al micrófono del usuario, si
es que hay uno instalado. Cuando se utiliza con Flash Communication
Server, el archivo SWF puede difundir y registrar audio desde el
micrófono de un usuario. Véase Microphone.
Mouse La clase Mouse controla el ratón en un archivo SWF; por ejemplo, esta
clase permite ocultar o mostrar el puntero del ratón. Véase Mouse.
MovieClip Cada uno de los clips de película de un archivo SWF es una instancia
de la clase MovieClip. Los métodos y propiedades de esta clase sirven
para controlar los objetos de clip de película. Véase MovieClip.
Sound La clase Sound controla los sonidos de un archivo SWF. Véase Sound.
264 Clases
El paquete flash.display
El paquete flash.display contiene la clase BitmapData, que puede utilizar para crear
presentaciones visuales.
Clase Descripción
BitmapData La clase BitmapData le permite crear en el documento mapas de
bits o imágenes transparentes u opacos con tamaño arbitrario y
manipularlos de diversas formas durante la ejecución. Véase
BitmapData (flash.display.BitmapData).
El paquete flash.external
El paquete flash.external le permite comunicarse con el contenedor de Flash Player empleando
código ActionScript. Por ejemplo, si incorpora un archivo SWF en una página HTML, dicha
página HTML es el contenedor. Podría comunicarse con la página HTML empleando la clase
ExternalInterface y JavaScript. También denominada la API externa.
Clase Descripción
ExternalInterface La clase ExternalInterface es la API externa, un subsistema que
permite la comunicación entre el código ActionScript y el
contenedor de Flash Player (como una página HTML que utiliza
JavaScript) o una aplicación de escritorio que utiliza Flash Player.
Véase ExternalInterface (flash.external.ExternalInterface).
El paquete flash.filters
El paquete flash.filters contiene clases para los efectos de filtro de mapa de bits disponibles en
Flash Player 8. Los filtros permiten aplicar efectos visuales muy diversos, como desenfoque,
bisel, iluminación y sombreado, a instancias de Image y MovieClip. Para más información
sobre cada clase, consulte las referencias cruzadas proporcionadas en la siguiente tabla.
Clase Descripción
BevelFilter La clase BevelFilter le permite añadir un efecto de bisel a una
instancia de clip de película. Véase BevelFilter
(flash.filters.BevelFilter).
BitmapFilter La clase BitmapFilter es una clase básica para todos los efectos de
filtro. Véase BitmapFilter (flash.filters.BitmapFilter).
266 Clases
El paquete flash.geom
El paquete flash.geom contiene clases geométricas, como puntos, rectángulos y matrices de
transformación. Estas clases permiten utilizar la clase BitmapData y la función de caché de
mapa de bits. Para más información sobre cada clase, consulte las referencias cruzadas
proporcionadas en la siguiente tabla.
Clase Descripción
ColorTransform La clase ColorTransform le permite establecer matemáticamente el
valor de color RGB y la transformación de color de una instancia.
Puede recuperar estos valores después de haberlos establecido. Véase
ColorTransform (flash.geom.ColorTransform).
El paquete flash.net
El paquete flash.net contiene clases que le permiten cargar y descargar uno o varios archivos
entre el equipo de un usuario y el servidor. Para más información sobre cada clase, consulte las
referencias cruzadas proporcionadas en la siguiente tabla.
Clase Descripción
FileReference La clase FileReference le permite cargar y descargar uno o varios
archivos entre el equipo de un usuario y un servidor. Véase
FileReference (flash.net.FileReference).
Clase Descripción
TextRenderer Esta clase ofrece la funcionalidad necesaria para la capacidad de
suavizado avanzado presente en Flash Player 8. Consulte
TextRenderer (flash.text.TextRenderer).
El paquete mx.lang
El paquete mx.lang incluye la clase Locale para trabajar con texto en varios idiomas.
Clase Descripción
Locale Esta clase le permite controlar la forma en la que se muestra texto en
varios idiomas en un archivo SWF. Véase Locale (mx.lang.Locale).
Clase Descripción
capabilities La clase capabilities determina las capacidades del sistema y de la
versión de Flash Player en que se aloja el archivo SWF. Esto le permite
personalizar el contenido para diferentes formatos. Véase capabilities
(System.capabilities).
268 Clases
El paquete TextField contiene la clase StyleSheet que puede utilizar para aplicar estilos CSS al
texto.
Clase Descripción
StyleSheet La clase StyleSheet permite crear un objeto de hoja de estilos que
contenga reglas de formato de texto, como tamaño de fuente, color y
otros estilos de formato. Véase StyleSheet (TextField.StyleSheet).
En algunos casos, no es necesario crear una instancia de una clase para utilizar sus propiedades
y métodos. Para más información, consulte “Miembros de clase (estáticos)” en la página 271.
El siguiente código crea un nuevo objeto Array y luego muestra su propiedad length:
var my_array:Array = new Array("apples", "oranges", "bananas");
trace(my_array.length); // 3
También puede utilizar el operador de acceso a una matriz ([]) para acceder a las propiedades
de un objeto, por ejemplo, al utilizar el operador de acceso a matriz para fines de depuración.
El siguiente ejemplo reproduce indefinidamente un objeto para mostrar cada una de sus
propiedades.
El código anterior define un nuevo elemento Object denominado “results” y define los
valores de firstName, lastName, age, avg, b y t. Un bucle for..in traza cada propiedad
en el objeto “results” y traza su valor en el panel Salida.
3. Seleccione Control > Probar película para probar el documento de Flash.
270 Clases
Para más información sobre operadores, incluidos los de punto y acceso a una matriz, consulte
“Operadores” en la página 142. Para más información sobre métodos y propiedades, consulte
el Capítulo 5, “Funciones y métodos”, en la página 169. Para ver ejemplos de la utilización de
propiedades de la clase MovieClip incorporada, consulte el Capítulo 11, “Trabajo con clips de
película”, en la página 373. Para ver ejemplos de la utilización de propiedades de las clases
TextField, String, TextRenderer y TextFormat, consulte el Capítulo 12, “Utilización de texto y
cadenas”, en la página 407.
Para ver ejemplos sobre la utilización de métodos de la clase MovieClip incorporada, consulte
el Capítulo 11, “Trabajo con clips de película”, en la página 373. Para ver ejemplos sobre la
utilización de métodos de las clases TextField, String, TextRenderer y TextFormat
incorporadas, consulte el Capítulo 12, “Utilización de texto y cadenas”, en la página 407.
Para más información sobre los métodos estáticos de la clase Math, así como ejemplos de su
uso, consulte Math en Referencia del lenguaje ActionScript 2.0.
Los valores que especifique para los atributos name en las etiquetas <asset> serán
nombres de clases que desee excluir del archivo SWF. Añada tantos como sean necesarios
para su aplicación. Por ejemplo, el siguiente archivo XML excluye las clases
mx.core.UIObject y mx.screens.Slide del archivo SWF:
<excludeAssets>
<asset name="mx.core.UIObject" />
<asset name="mx.screens.Slide" />
</excludeAssets>
Para obtener información sobre la precarga de clases, consulte “Precarga de archivos de clase”
en la página 273.
272 Clases
Precarga de archivos de clase
En esta sección se describen algunas de las metodologías para precargar y exportar clases en
Flash 8 (incluidas las clases que utilizan los componentes de la versión 2 de la arquitectura de
componentes de Macromedia). La precarga implica cargar algunos de los datos de un archivo
SWF antes de que el usuario inicie la interacción con el archivo. Flash importa clases en el
primer fotograma de un archivo SWF cuando se utilizan clases externas y estos datos son el
primer elemento que se carga en un archivo SWF. El proceso es similar en las clases de
componentes porque el marco de componentes también se carga en el primer fotograma de
un archivo SWF. Cuando se crean aplicaciones grandes, el tiempo de carga puede ser largo si
es necesario importar datos, de modo que hay que manejar los datos de forma inteligente,
como se muestra en los siguientes procedimientos.
Como las clases son los primeros datos que se cargan, puede tener problemas para crear una
barra de progreso o para cargar una animación si las clases se cargan antes de la barra de
progreso, porque es probable que desee que la barra refleje el progreso de la carga de todos los
datos, incluidas las clases. Por lo tanto, es preferible cargar las clases después de otras partes del
archivo SWF pero antes de utilizar los componentes.
El siguiente procedimiento muestra cómo cargar el fotograma en el que las clases se cargan en
un archivo SWF.
Debe exportar los componentes después de las clases de ActionScript que utilizan.
A T E NC I Ó N
274 Clases
7
CAPÍTULO 7
Herencia
En el Capítulo 6, “Clases”, hemos aprendido a escribir archivos de clases y hemos visto cómo
las clases ayudan a organizar el código en archivos externos. En dicho capítulo, también se ha
descrito cómo organizar los archivos de clases en paquetes relacionados. Este capítulo tiene
como objetivo mostrarle cómo escribir clases más avanzadas que amplíen la funcionalidad de
una clase existente. Se trata de un asunto de gran utilidad, ya que la extensión de sus propias
clases o de clases existentes le permitirá añadir nuevos métodos y propiedades.
Para más información sobre la herencia, consulte “Herencia” en la página 275. Para más
información sobre métodos y propiedades, consulte el Capítulo 5, “Funciones y métodos”, en
la página 169.
Para más información sobre la herencia, consulte los temas siguientes:
Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Escritura de subclases en Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Utilización de polimorfismo en una aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283
Herencia
En el Capítulo 6, “Clases” hemos visto cómo podría crearse un archivo de clase para establecer
sus propios tipos de datos personalizados. Al aprender a crear archivos de clases
personalizados, se conoce la forma de trasladar código de la línea de tiempo a archivos
externos. El traslado de código a archivos externos facilita la edición del código. Ahora que ya
está familiarizado con los principios básicos de la creación de clases personalizadas, es el
momento de aprender una técnica de programación orientada a objetos (OOP) conocida
como creación de subclases o ampliación de una clase y que le permite crear nuevas clases a partir
de una clase existente.
275
Una de las ventajas de la OOP es que puede crear subclases de una clase. La subclase hereda
todas las propiedades y métodos de una superclase. Por ejemplo, si amplía (o crea una subclase
de ) la clase MovieClip, estará creando una clase personalizada que amplía la clase MovieClip.
La subclase hereda todas las propiedades y los métodos de la clase MovieClip. O bien puede
crear un conjunto de clases que amplíen una superclase personalizada. Por ejemplo, la clase
Lettuce (lechuga) podría ampliar la superclase Vegetable (verduras).
La subclase normalmente define métodos y propiedades adicionales que puede utilizar en la
aplicación, de ahí que se conozca como ampliar la superclase. Las subclases también pueden
suplantar a (proporcionar sus propias definiciones para) los métodos heredados de una
superclase. Si una subclase sustituye un método heredado de su superclase, ya no podrá
acceder a la definición de la superclase dentro de la subclase. La única excepción a la regla
anterior es que, si está dentro de la función constructora de la subclase, llamará al constructor
de la superclase mediante la sentencia super. Para más información sobre la sustitución,
consulte “Sustitución de métodos y propiedades” en la página 281.
Por ejemplo, puede crear una clase Mammal (mamífero) que defina determinadas propiedades
y comportamientos comunes a todos los mamíferos. Luego podría crear una subclase Cat
(gato) que se ampliara a la clase Mammal. El uso de subclases permite reutilizar código, por lo
que, en lugar de volver a crear todo el código común a ambas clases, podría simplemente
ampliar una clase existente. A su vez, otra subclase, la clase Siamese (siamés), podría ampliar la
clase Cat y, así, sucesivamente. En una aplicación compleja, determinar la estructura
jerárquica de las clases constituye una gran parte del proceso de diseño.
La herencia y la creación de subclases resultan muy útiles en aplicaciones grandes, ya que le
permiten crear una serie de clases relacionadas que comparten funcionalidad. Por ejemplo,
puede crear una clase Employee (empleado) que defina los métodos y propiedades básicos del
empleado típico de una empresa. Luego puede crear una nueva clase denominada Contractor
(contratista) que amplíe la clase Employee y herede todos sus métodos y propiedades. La clase
Contractor podría añadir sus propios métodos y propiedades específicos o sustituir métodos y
propiedades definidos en la superclase Employee. Luego puede crear una nueva clase
denominada Manager (jefe) que también amplíe la clase Employee y defina métodos y
propiedades adicionales como hire() (contratar), fire() (despedir), raise() (subir el
sueldo) y promote() (ascender). Puede incluso ampliar una subclase, por ejemplo, Manager, y
crear una nueva clase denominada Director que, una vez más, añada nuevos métodos o
sustituya los métodos existentes.
276 Herencia
Cada vez que amplíe una clase existente, la nueva clase heredará todos los métodos y
propiedades actuales de la subclase. Si no estuvieran relacionadas las clases, tendría que
reescribir cada método y propiedad en cada archivo de clase independiente, aunque la
funcionalidad fuese la misma que en clases similares. Tendría que invertir mucho tiempo no
solamente en codificar, sino también en depurar la aplicación y mantener el proyecto si una
lógica similar cambiara en varios archivos.
En ActionScript, debe utilizar la palabra clave extends para establecer la herencia entre una clase
y su superclase, o bien ampliar una interfaz. Para más información sobre el uso de la palabra
clave extends, consulte “Escritura de subclases en Flash” en la página 277 y “Escritura de una
subclase” en la página 278. Para obtener información adicional sobre la palabra clave extends,
consulte extends statement en Referencia del lenguaje ActionScript 2.0.
La clase que se especifica en SubClass hereda todas las propiedades y los métodos definidos en
SuperClass.
Por ejemplo, podría crear una clase Mammal que defina propiedades y métodos comunes a
todos los mamíferos. Para crear una variación de la clase Mammal, como una clase Marsupial,
podría ampliar la clase Mammal, es decir, crear una subclase de la clase Mammal, de la
siguiente forma:
class Marsupial extends Mammal {}
La subclase hereda todas las propiedades y los métodos de la superclase, incluidos las propiedades
y los métodos que se han declarado como privados mediante la palabra clave private.
Para más información sobre la ampliación de clases, consulte los temas siguientes:
■ “Escritura de una subclase” en la página 278
■ “Sustitución de métodos y propiedades” en la página 281
Para más información sobre miembros privados, consulte “Métodos y propiedades
(miembros) públicos, privados y estáticos” en la página 217. Para ver un ejemplo en el que se
crea una subclase, consulte “Ejemplo: Ampliación de la clase Widget” en la página 279.
// permitido
class B extends A {}
class C extends B {}
También puede utilizar interfaces para implementar una forma de herencia múltiple limitada.
Para más información sobre interfaces, consulte el Capítulo 8, “Interfaces”, en la página 289.
Para ver un ejemplo en el que se crea una subclase, consulte “Ejemplo: Ampliación de la clase
Widget” en la página 279. Para obtener información adicional sobre super, consulte super
statement en Referencia del lenguaje ActionScript 2.0.
278 Herencia
Ejemplo: Ampliación de la clase Widget
Los miembros de clases se propagan en las subclases de la superclase que definen estos
miembros. En el siguiente ejemplo se muestra cómo podría crear una clase Widget que se
amplíe (crear una subclase) escribiendo una clase llamada SubWidget.
El código anterior crea dos instancias de la clase SubWidget: sw1 y sw2. Cada llamada al
constructor SubWidget traza el valor actual de la propiedad estática Widget.widgetCount.
Debido a que la clase SubWidget es una subclase de la clase Widget, puede acceder a la
propiedad widgetCount a través de la clase SubWidget y el compilador reescribe la referencia
(en el código de bytes, no en el archivo ActionScript) como Widget.widgetCount. Si intenta
acceder a la propiedad estática widgetCount de las instancias de las clase Widget o SubWidget,
como sw1 o sw2, el compilador devuelve un error.
Este resultado aparece porque, a pesar de que en ningún momento se llama de forma
explícita al constructor de la clase Widget, sí lo llama automáticamente el constructor de la
clase SubWidget. Esto hace que el constructor de la clase Widget incremente la variable
estática widgetCount de la clase Widget.
El compilador de ActionScript 2.0 puede resolver referencias a miembros estáticos dentro
de las definiciones de clases.
Si no especifica el nombre de clase para la propiedad Widget.widgetCount, sino que sólo
hace referencia a widgetCount, el compilador de ActionScript 2.0 resuelve la referencia en
Widget.widgetCount y exporta correctamente dicha propiedad. De igual forma, si hace
referencia a la propiedad como SubWidget.widgetCount, el compilador reescribe la
referencia (en el código de bytes, no en el archivo ActionScript) como
Widget.widgetCount porque SubWidget es una subclase de la clase Widget.
instancias sw1 o sw2, Flash genera un error en el que se indica que sólo se puede
acceder directamente a los miembros estáticos a través de las clases.
Para que el código alcance una legibilidad óptima, Macromedia recomienda utilizar siempre
referencias explícitas a variables de miembros estáticos del código, como se muestra en el
ejemplo anterior. El uso de referencias explícitas significa que puede identificar fácilmente el
lugar en que se encuentra la definición de un miembro estático.
280 Herencia
Sustitución de métodos y propiedades
Cuando una subclase amplía una superclase, la subclase hereda todos los métodos y
propiedades de la superclase. Una de las ventajas que ofrece el uso y la ampliación de clases es
que permite, no sólo proporcionar una nueva funcionalidad para una clase existente, sino
también modificar la funcionalidad existente. Por ejemplo, tomemos la clase Widget que ha
creado en el “Ejemplo: Ampliación de la clase Widget” en la página 279. Podría crear un
nuevo método en la superclase (Widget) y luego sustituir el método en la subclase
(SubWidget) o simplemente utilizar el método heredado de la clase Widget. En el siguiente
ejemplo se muestra cómo sustituir métodos existentes en las clases.
class Widget {
public static var widgetCount:Number = 0;
public function Widget() {
Widget.widgetCount++;
}
public function doSomething():Void {
trace("Widget::doSomething()");
}
}
12. Guarde los cambios en el archivo de clase y luego abra de nuevo subwidgetTest.fla.
282 Herencia
13. Seleccione Control > Probar película para probar el archivo. Se ve el resultado siguiente en
el panel Salida:
Creating subwidget #1
SubWidget::doSomething()
Creating subwidget #2
SubWidget::doSomething()
Como se ha demostrado, puede añadir la palabra clave super para llamar al método
doSomething() de la superclase en lugar de al método doSomething() de la clase actual.
Para obtener información adicional sobre super, consulte la entrada super en Referencia
del lenguaje ActionScript 2.0.
14. Guarde el archivo de clase SubWidget con el constructor modificado y seleccione Control >
Probar película para volver a publicar el documento de Flash.
El panel Salida muestra el contenido del método doSomething() de la clase Widget.
// constructor
public function Mammal(gender:String) {
this._gender = gender;
}
La clase anterior define dos variables privadas, _gender y _name, que se utilizan para
almacenar el género del animal y el tipo de mamífero. A continuación, se define el
constructor de Mammal. El constructor toma un único parámetro, gender, que utiliza para
establecer la variable _gender definida anteriormente. También se especifican tres
métodos públicos adicionales: toString(), play() y sleep(), cada uno de los cuales
devuelve objetos de cadena. Los tres últimos métodos son el captador (getter) y los
definidores (setters) de las propiedades _gender y _name del mamífero.
284 Herencia
3. Guarde el documento ActionScript.
Esta clase actúa como superclase de las clases Cat, Dog y Monkey, que crearemos en breve.
Puede utilizar el método toString() de la clase Mammal para mostrar una
representación de cadena de cualquier instancia de Mammal (o cualquier instancia que
haya ampliado la clase Mammal).
4. Cree un nuevo archivo ActionScript y guárdelo como Cat.as en el mismo directorio que el
archivo de clase Mammal.as creado en el paso 1.
5. En Cat.as, escriba el siguiente código ActionScript en la ventana Script:
class Cat extends Mammal {
// constructor
public function Cat(gender:String) {
super(gender);
speciesName = "Cat";
}
Observe que está sustituyendo el método play() de la superclase Mammal. La clase Cat
sólo define dos métodos, un constructor y un método play(). Dado que la clase Cat
amplía la clase Mammal, la clase Cat hereda los métodos y propiedades de la clase
Mammal. Para más información sobre sustitución, consulte “Sustitución de métodos y
propiedades” en la página 281.
6. Guarde los cambios en el documento ActionScript.
7. Cree un nuevo documento ActionScript y guárdelo como Dog.as en el mismo directorio
que los dos archivos de clases anteriores.
8. En Dog.as, escriba el siguiente código ActionScript en la ventana Script:
class Dog extends Mammal {
// constructor
public function Dog(gender:String) {
super(gender);
speciesName = "Dog";
}
Al igual que las dos clases anteriores, Cat y Dog, la clase Monkey amplía la clase Mammal.
El constructor de la clase Monkey llama al constructor de la clase Mammal y pasa el
género (gender) al constructor de Mammal, además de establecer speciesName con la
cadena Monkey. La clase Monkey también sustituye el comportamiento del método
play().
12. Guarde los cambios en el documento ActionScript.
13. Ahora que ha creado tres subclases de la clase Mammal, cree un nuevo documento de Flash
denominado mammalTest.fla.
14. En mammalTest.fla, escriba el siguiente código ActionScript en el fotograma 1 de la línea
de tiempo principal:
var mammals_arr:Array = new Array();
this.createTextField("info_txt", 10, 10, 10, 450, 80);
info_txt.html = true;
info_txt.multiline = true;
info_txt.border = true;
info_txt.wordWrap = true;
createMammals()
createReport()
286 Herencia
function createMammals():Void {
mammals_arr.push(new Dog("Female"));
mammals_arr.push(new Cat("Male"));
mammals_arr.push(new Monkey("Female"));
mammals_arr.push(new Mammal("Male"));
}
function createReport():Void {
var i:Number;
var len:Number = mammals_arr.length;
// Mostrar información de Mammal en 4 columnas de texto HMTL
utilizando tabulaciones.
info_txt.htmlText = "<textformat tabstops='[110, 200, 300]'>";
info_txt.htmlText += "<b>Mammal\tGender\tSleep\tPlay</b>";
for (i = 0; i < len; i++) {
info_txt.htmlText += "<p>" + mammals_arr[i].speciesName
+ "\t" + mammals_arr[i].gender
+ "\t" + mammals_arr[i].sleep()
+ "\t" + mammals_arr[i].play() + "</p>";
// La sentencia trace llama al método Mammal.toString().
trace(mammals_arr[i]);
}
info_txt.htmlText += "</textformat>";
}
El código mammalTest.fla es un poco más complejo que las clases anteriores. En primer
lugar, importa las tres clases de animales.
15. Guarde el documento de Flash y luego seleccione Control > Probar película para probar el
documento.
Verá la información de Mammal en un campo de texto en el escenario y el siguiente texto
en el panel Salida:
[object Dog]
[object Cat]
[object Monkey]
[object Mammal]
Interfaces
Interfaces
En programación orientada a objetos, las interfaces son como clases cuyos métodos no se
implementan (definen), es decir, no “hacen” nada. Por consiguiente, una interfaz consta de
métodos “vacíos”. Otra clase puede implementar los métodos declarados por la interfaz. En
ActionScript, la distinción entre interfaz y objeto sólo se aplica en la comprobación de errores
en tiempo de compilación y en el cumplimiento de las reglas del lenguaje.
289
Una interfaz no es una clase; sin embargo, esto no es del todo cierto en ActionScript en
tiempo de ejecución, ya que la interfaz es abstracta. Las interfaces de ActionScript existen de
hecho en tiempo de ejecución para permitir la conversión de tipos (cambiar un tipo de datos
existente por otro distinto). El modelo de objetos de ActionScript 2.0 no admite la herencia
múltiple. Por lo tanto, una clase sólo puede heredar de una única clase principal. Esta clase
principal puede ser una clase central o de Flash Player o bien una clase definida por el usuario
(personalizada). Puede utilizar interfaces para implementar una forma limitada de herencia
múltiple, a través de la cual una clase hereda de más de una clase.
Por ejemplo, en C++, la clase Cat podría ampliar la clase Mammal, así como una clase Playful
(juguetón), que tiene los métodos chaseTail (perseguirCola) y eatCatNip (comerFriskies).
Al igual que Java, ActionScript 2.0 no permite que una clase se amplíe en múltiples clases
directamente, pero sí permite que una clase amplíe una sola clase e implemente múltiples
interfaces. Por consiguiente, podría crear una interfaz Playful que declarara los métodos
chaseTail() y eatCatNip(). Una clase Cat, o cualquier otra clase, podría implementar esta
interfaz y proporcionar definiciones para dichos métodos.
Una interfaz también puede considerarse como un “contrato de programación” que puede
utilizarse para aplicar relaciones entre clases que de otro modo no estarían relacionadas. Por
ejemplo, suponga que está trabajando con un equipo de programadores y que cada uno de
ellos está trabajando en una clase distinta dentro de la misma aplicación. Al diseñar la
aplicación, se acordaron una serie de métodos que utilizan las distintas clases para
comunicarse. Puede crear una interfaz que declare estos métodos, sus parámetros y sus tipos de
devolución. Todas las clases que implementen esta interfaz deben proporcionar definiciones
de dichos métodos; de lo contrario, se produce un error en el compilador. La interfaz es como
un protocolo de comunicación que deben cumplir todas las clases.
Una forma de llevar esto a cabo es crear una clase que defina todos estos métodos y, a
continuación, hacer que cada clase amplíe o herede de esta superclase. Sin embargo, dado que
la aplicación consta de clases que no están relacionadas entre sí, no tiene ningún sentido
organizarlas en una jerarquía de clases común. Es mejor crear una interfaz que declare los
métodos que estas clases utilizarán para comunicarse y después hacer que cada clase
implemente (proporcione sus propias definiciones para) estos métodos.
En general se puede programar correctamente sin utilizar interfaces. Sin embargo, cuando se
utilizan adecuadamente, las interfaces pueden hacer que el diseño de las aplicaciones sea más
elegante, escalable y sostenible.
290 Interfaces
Las interfaces de ActionScript existen en tiempo de ejecución para permitir la conversión de
tipos; consulte Capítulo 10, “Conversión de objetos”, en la página 370. Una interfaz no es un
objeto ni una clase, pero el flujo de trabajo es similar al que se utiliza al trabajar con clases.
Para más información sobre el flujo de trabajo de clases, consulte “Escritura de archivos de
clases personalizadas” en la página 205. Para ver un tutorial sobre la creación de una
aplicación con interfaces, consulte “Ejemplo: Utilización de interfaces” en la página 298.
Para más información sobre el uso de interfaces, consulte las secciones siguientes:
■ “La palabra clave interface” en la página 291
■ “Asignación de nombre a las interfaces” en la página 292
■ “Definición e implementación de interfaces” en la página 292
Interfaces 291
Asignación de nombre a las interfaces
Los nombres de interfaces empiezan por una letra mayúscula, al igual que los nombres de
clase. Los nombres de interfaces suelen ser adjetivos como, por ejemplo, Printable. El
nombre de interfaz IEmployeeRecords empieza con mayúscula y contiene palabras
concatenadas donde se mezclan mayúsculas y minúsculas:
interface IEmployeeRecords {}
Algunos desarrolladores empiezan los nombres de interfaces con una “I” mayúscula
N OT A
Para más información sobre convenciones de asignación de nombre, consulte el Capítulo 19,
“Recomendaciones y convenciones de codificación para ActionScript 2.0”, en la página 775.
Una interfaz sólo puede contener declaraciones de método (función), que incluyen
parámetros, tipos de parámetros y tipos de devolución de función.
Para más información sobre convenciones de estructuración de clases e interfaces, consulte el
Capítulo 19, “Recomendaciones y convenciones de codificación para ActionScript 2.0”, en
la página 775. Para ver un tutorial sobre la creación de una aplicación que utiliza interfaces,
consulte “Ejemplo: Utilización de interfaces” en la página 298.
292 Interfaces
Por ejemplo, el siguiente código declara una interfaz denominada IMyInterface que
contiene dos métodos, method1() y method2(). El primer método, method1(), no tiene
parámetros y especifica el tipo de devolución Void (lo que significa que no devuelve ningún
valor). El segundo método, method2(), tiene un solo parámetro de tipo String (cadena) y
especifica el tipo de devolución Boolean.
Interfaces 293
8. Modifique de nuevo el documento MyClass (añada el código en negrita) y escriba el código
ActionScript para los métodos method1() y method2(), como se muestra en el siguiente
fragmento:
class MyClass implements IMyInterface {
public function method1():Void {
// ...
};
public function method2(param:String):Boolean {
// ...
return true;
}
}
294 Interfaces
Creación de interfaces como tipos de datos
Al igual que las clases, una interfaz define un nuevo tipo de datos. Puede decirse que cualquier
clase que implemente una interfaz es del tipo definido por la interfaz. Esto resulta útil para
determinar si un objeto dado implementa una interfaz concreta. Tomemos, por ejemplo, la
interfaz IMovable, que creará en el siguiente ejemplo.
Este código ActionScript crea una instancia de la clase box, que debe declarar como
variable del tipo Box.
9. Guarde los cambios en el documento de Flash y luego seleccione Control > Probar película
para probar el archivo SWF.
En Flash Player 7 y posteriores, puede convertir una expresión en un tipo de interfaz u
otro tipo de datos durante la ejecución. A diferencia de las interfaces Java, las interfaces
ActionScript existen en tiempo de ejecución, lo que permite la conversión de tipos. Si la
expresión es un objeto que implementa la interfaz o tiene una superclase que implementa
la interfaz, se devuelve el objeto. De lo contrario, se devuelve null. Esto es útil para
asegurarse de que un objeto concreto implemente una interfaz determinada. Para más
información sobre la conversión de tipos, consulte el Capítulo 10, “Conversión de
objetos”, en la página 370.
10. Añada el siguiente código al final del código ActionScript de boxTest.fla:
if (IMovable(newBox) != null) {
newBox.moveUp();
} else {
trace("box instance is not movable");
}
296 Interfaces
Herencia e interfaces
Puede utilizar la palabra clave extends para crear subclases de una interfaz. Esto puede ser de
gran utilidad en proyectos grandes en los que desee ampliar (o crear subclases de) una interfaz
existente y añadir métodos adicionales. Todas las clases que implementen esa interfaz deberán
definir estos métodos.
Un aspecto que debe tener en cuenta al ampliar interfaces es que recibirá mensajes de error en
Flash si varios archivos de interfaz declaran funciones con los mismos nombres pero tienen
parámetros o tipos de devolución diferentes.
En el siguiente ejemplo se muestra cómo pueden crearse subclases de un archivo de interfaz
empleando la palabra clave extends.
Si desea que la clase ClassA implemente varias interfaces en el ejemplo anterior, simplemente
tendrá que separar las interfaces con comas. O bien, si tuviera una clase que ampliara una
superclase e implementara varias interfaces, tendría que utilizar un código similar al siguiente:
class ClassA extends ClassB implements Ib, Ic, Id {...}.
298 Interfaces
Este error aparece porque la clase FlashPaper actual no define ninguno de los métodos
públicos que ha definido en la interfaz IDocumentation.
8. Abra el archivo de clase FlashPaper.as de nuevo y modifique el código ActionScript
existente para que coincida con el siguiente código:
class FlashPaper implements IDocumentation {
private static var __version:String = "1,2,3,4";
public function downloadUpdates():Void {
};
public function checkForUpdates():Boolean {
return true;
};
public function searchHelp(keyword:String):Array {
return []
};
}
9. Guarde los cambios en el archivo ActionScript y luego haga clic de nuevo en Revisar
sintaxis.
En esta ocasión no se ven errores en el panel Salida.
Puede añadir al archivo de clase FlashPaper tantas variables o métodos estáticos,
NO TA
11. Guarde los cambios en el archivo de interfaz y vuelva a abrir el documento FlashPaper.as.
12. Haga clic en el botón Revisar sintaxis y verá un nuevo mensaje de error en el panel Salida:
**Error** path\FlashPaper.as: Line 1: La clase debe implementar el
método ‘addComment’ de la interfaz ‘IDocumentation’.
class FlashPaper implements IDocumentation {
Total ActionScript Errors: 1 Reported Errors: 1
Se ve el error anterior porque el archivo de clase FlashPaper.as ya no define todas las clases
esbozadas en el archivo de interfaz. Para resolver este mensaje de error, deberá añadir el
método addComment() a la clase FlashPaper o quitar la definición del método del archivo
de interfaz IDocumentation.
14. Guarde los cambios en FlashPaper.as y haga clic en el botón Revisar sintaxis, tras lo cual no
debería aparecer ningún error.
En la sección anterior, hemos creado una clase basada en el archivo de interfaz
IDocumentation. En esta sección, crearemos una nueva clase que también implementará la
interfaz IDocumentation, aunque añadirá algunos métodos y propiedades adicionales.
En este tutorial se demuestra la utilidad de las interfaces, ya que, si desea crear otra clase que
amplíe la interfaz IDocumentation, podrá identificar fácilmente los métodos que deberá
contener la nueva clase.
300 Interfaces
5. En ClassB.as, escriba el siguiente código ActionScript en la ventana Script:
// nombre de archivo: ClassB.as
class ClassB implements InterfaceA {
public function k():Number {
return 25;
}
public function n(z:Number):Number {
return (z + 5);
}
}
8. Guarde los cambios en el documento de Flash y luego seleccione Control > Probar película
para probar el documento de Flash.
El panel Salida muestra dos números, 25 y 12, que son los resultados de los métodos k() y
n() de la clase ClassB.
9. Cree un nuevo archivo ActionScript y guárdelo como ClassC.as en el directorio
complexInterface.
Este archivo de clase implementa la interfaz InterfaceA creada en el paso 1.
10. En ClassC.as, escriba el siguiente código ActionScript en la ventana Script:
// nombre de archivo: ClassC.as
class ClassC implements InterfaceA {
public function k():Number {
return 25;
}
// **Error** La clase debe también implementar el método 'n' de la
interfaz 'InterfaceA'.
}
Si hace clic en el botón Revisar sintaxis para el archivo de clase ClassC, Flash muestra un
mensaje de error en el panel Salida que indica que la clase actual debe implementar el
método n() en la interfaz InterfaceA. Al crear clases que implementen una interfaz, es
importante definir métodos para cada entrada de la interfaz.
13. Guarde los cambios en el documento InterfaceB.as, cree un nuevo documento ActionScript
y guárdelo en el directorio complexInterface con el nombre ClassD.as.
Esta clase implementa la interfaz InterfaceA y la interfaz InterfaceB creadas en pasos
anteriores. La clase ClassD debe incluir implementaciones de método por cada uno de los
métodos enumerados en cada uno de los archivos de interfaz.
14. En ClassD.as, escriba el siguiente código ActionScript en la ventana Script:
// nombre de archivo: ClassD.as
class ClassD implements InterfaceA, InterfaceB {
public function k():Number {
return 15;
}
public function n(z:Number):Number {
return (z * z);
}
public function o():Void {
trace("o");
}
}
15. Guarde los cambios en el archivo ClassD.as, cree un nuevo documento de Flash y guárdelo
como classdTest.fla.
El documento de Flash probará la clase ClassD creada anteriormente.
16. In classdTest.fla, añada el siguiente código ActionScript en el fotograma 1 de la línea de
tiempo:
// nombre de archivo: classdTest.fla
import ClassD;
var myD:ClassD = new ClassD();
trace(myD.k()); // 15
trace(myD.n(7)); // 49
myD.o(); // o
302 Interfaces
17. Guarde los cambios en el archivo classdTest.fla y luego seleccione Control > Probar película
para probar el archivo.
Deberán aparecer los valores 15, 49 y la letra en el panel Salida. Estos valores son el
resultado del método ClassD.k(), los métodos ClassD.n() y ClassD.o(),
respectivamente.
18. Cree un nuevo documento ActionScript y guárdelo como InterfaceC.as.
Esta interface amplía la interfaz InterfaceA creada anteriormente y añade una nueva
definición de método.
19. En InterfaceC.as, escriba el siguiente código ActionScript en la ventana Script:
// nombre de archivo: InterfaceC.as
interface InterfaceC extends InterfaceA {
public function p():Void;
}
24.Guarde el documento de Flash y luego seleccione Control > Probar película para probar el
archivo SWF.
Aparecerán los valores 15, 12, o y p en el panel Salida. Estos son los valores devueltos por
los métodos ClassE.k(), ClassE.n(), ClassE.o() y ClassE.p(). Dado que la clase
ClassE implementa las interfaces InterfaceB y InterfaceC, deberá definirse cada método de
los dos archivos de interfaz. Aunque las interfaces InterfaceB y InterfaceC sólo definen los
métodos o() y p(), InterfaceC amplía InterfaceA. Esto significa que todos los métodos
definidos que incluye, k() y n(), también deben implementarse.
304 Interfaces
9
CAPÍTULO 9
Gestión de eventos
Eventos: acciones que tienen lugar durante la reproducción de un archivo SWF. Un evento
como hacer clic con el ratón o presionar una tecla se denomina evento de usuario, puesto que
es una consecuencia directa de una acción del usuario. Un evento generado automáticamente
por Flash Player, como la aparición inicial de un clip de película en el escenario, se denomina
evento del sistema porque no lo genera directamente el usuario.
A fin de que la aplicación reaccione ante los eventos, debe utilizar controladores de eventos, es
decir, código ActionScript asociado con un objeto y un evento determinados. Por ejemplo, si
un usuario hace clic en un botón del escenario, se podría avanzar la cabeza lectora hasta el
siguiente fotograma. O bien, al finalizar la carga de un archivo XML por la red, el contenido
de dicho archivo podría aparecer en un campo de texto.
Puede gestionar eventos en ActionScript de diversas formas:
■ “Utilización de métodos de controlador de eventos” en la página 306
■ “Utilización de detectores de eventos” en la página 308
■ “Utilización de controladores de eventos de botones y de clips de película” en
la página 313, específicamente, on handler y onClipEvent handler.
■ “Difusión de eventos desde instancias de componentes” en la página 318
La utilización de controladores de eventos con loadMovie (método MovieClip.loadMovie)
puede producir resultados impredecibles. Si asocia un controlador de eventos a un botón
mediante on(), o si crea un controlador dinámico empleando un método de controlador de
eventos como onPress (MovieClip.onPress handler) y posteriormente efectúa una llamada a
loadMovie(), el controlador de eventos no estará disponible después de cargarse el nuevo
contenido. No obstante, si utiliza onClipEvent handler o on handler para asociar un
controlador de eventos a un clip de película y luego efectúa una llamada a loadMovie() en
dicho clip de película, el controlador de eventos continuará estando disponible después de
cargarse el nuevo contenido.
Para más información sobre la gestión de eventos, consulte las secciones siguientes:
Utilización de métodos de controlador de eventos. . . . . . . . . . . . . . . . . . . . . . . . . . 306
Utilización de detectores de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
305
Utilización de detectores de eventos con componentes. . . . . . . . . . . . . . . . . . . . . . .311
Utilización de controladores de eventos de botones y de clips de película . . . . . . 313
Difusión de eventos desde instancias de componentes . . . . . . . . . . . . . . . . . . . . . . 318
Creación de clips de película con estados de botón. . . . . . . . . . . . . . . . . . . . . . . . . . 319
Ámbito del controlador de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Ámbito de la palabra clave this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324
Utilización de la clase Delegate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324
Observe en el siguiente ejemplo que se asigna una referencia de función, no el valor devuelto
por la función, al controlador de eventos onPress.
// Incorrecto
next_btn.onPress = goNextFrame();
// Correcto.
next_btn.onPress = goNextFrame;
Este código crea un objeto llamado focusListener que define una propiedad
onSetFocus y asigna una función a la propiedad. La función está formada por dos
parámetros: una referencia al campo de texto que no está seleccionado y una referencia al
campo de texto que está seleccionado. La función define la propiedad border del campo
de texto que no está seleccionado con el valor false y define la propiedad border del
campo que está seleccionado con el valor true.
6. Para registrar el objeto focusListener para que reciba eventos del objeto Selection, añada
el código siguiente al panel Acciones:
// Registra focusListener con el difusor.
Selection.addListener(focusListener);
7. Pruebe la aplicación (Control > Probar película), haga clic en el primer campo de texto y
presione la tecla Tabulador para pasar la selección de un campo a otro.
my_ldr.addEventListener("progress", loaderListener);
my_ldr.addEventListener("complete", loaderListener);
my_ldr.load("http://www.helpexamples.com/flash/images/image1.jpg");
my_ldr.addEventListener("progress", progressListener);
my_ldr.addEventListener("complete", completeListener);
my_ldr.load("http://www.helpexamples.com/flash/images/image1.png");
function progressListener(evt_obj:Object):Void {
trace(evt_obj.type); // progress
trace("\t" + evt_obj.target.bytesLoaded + " of " +
evt_obj.target.bytesTotal + " bytes loaded");
}
function completeListener(evt_obj:Object):Void {
trace(evt_obj.type); // complete
}
No confunda los controladores de eventos de botón o clip de película con los eventos de
N OT A
lugar, debería poner el código en scripts de fotograma en un archivo de clase, tal y como
se muestra en este manual. Para más información, consulte “Utilización de métodos de
controlador de eventos” en la página 306 y “Asociación de código a los objetos” en
la página 791.
Para más información sobre controladores de eventos de botones y clips de película, consulte
los siguientes temas:
■ “Utilización de onClipEvent con métodos de controlador de eventos” en la página 314
■ “Especificación de eventos para métodos on o onClipEvent” en la página 316
■ “Asociación o asignación de varios controladores a un objeto” en la página 317
Se pueden especificar dos o más eventos para cada controlador on(), separados por comas. El
ActionScript de un controlador se ejecuta cuando se produce uno de los eventos especificados
por el controlador. Por ejemplo, el controlador on() siguiente asociado a un botón se ejecuta
cada vez que el ratón se desplaza sobre el botón y luego se sitúa fuera del botón.
on (rollOver, rollOut) {
trace("You rolled over, or rolled out");
}
También se pueden añadir eventos de pulsaciones de teclas mediante los controladores on().
Por ejemplo, el siguiente código traza una cadena cuando se presiona el número 3 del teclado.
Seleccione una instancia de clip de película o botón y añada el siguiente código al panel
Acciones:
on (keyPress "3") {
trace("You pressed 3")
}
O bien, si desea que se realice el trazo cuando el usuario presione la tecla Intro, podría utilizar
el siguiente formato de código. Seleccione una instancia de clip de película o botón y añada el
siguiente código al panel Acciones:
on (keyPress "<Enter>") {
trace("Enter Pressed");
}
lugar, debería poner el código en scripts de fotograma en un archivo de clase, tal y como
se muestra en este manual. Para más información, consulte “Utilización de métodos de
controlador de eventos” en la página 306 y “Asociación de código a los objetos” en
la página 791.
lugar, debería poner el código en scripts de fotograma en un archivo de clase, tal y como
se muestra en este manual. Para más información, consulte “Utilización de métodos de
controlador de eventos” en la página 306 y “Asociación de código a los objetos” en
la página 791.
Para asociar varios controladores a un objeto mediante el código que se ha colocado en la línea
de tiempo, consulte el siguiente ejemplo. El código asocia los controladores onPress y
onRelease a una instancia de clip de película.
10. Seleccione el fotograma 10 de las tres capas y, a continuación, seleccione Insertar > Línea
de tiempo > Fotograma clave.
11. Añada una acción stop() en el fotograma 10 de la capa actions y una etiqueta de fotograma
_over en el fotograma 10 de la capa layer.
12. Seleccione el rectángulo en el fotograma 10 y utilice el inspector de propiedades para
seleccionar otro color de relleno.
Aunque los dos controladores de evento tienen el mismo código, los resultados pueden ser
diferentes. En el primer caso, la variable color es local para la función definida para onPress.
En el segundo caso, dado que el controlador on() no define un ámbito de variable local, la
variable se define en el ámbito de la línea de tiempo del clip de película clip_mc.
Para los controladores de eventos on() asociados a los botones, en lugar de a los clips de
película, las variables (así como las llamadas de función y método) se invocan en el ámbito de
la línea de tiempo que contiene la instancia de botón.
Por ejemplo, el controlador de eventos on() siguiente produce un resultado diferente
dependiendo de si se ha asociado a un objeto de clip de película o de botón. En el primer caso,
la llamada a la función play() pone en marcha la cabeza lectora en la línea de tiempo que
contiene el botón; en el segundo, la llamada a la función play() inicia la línea de tiempo del
clip de película al cual está asociado el controlador.
// Asociado al botón.
on (press) {
play(); // Reproduce la línea de tiempo principal.
}
// Asociado al clip de película.
on (press) {
play(); // Reproduce la línea de tiempo del clip de película.
}
Para reproducir el clip de película que define el controlador de eventos onPress, haga
referencia explícita a ese clip mediante la palabra clave this, del modo siguiente:
// Función definida en la línea de tiempo raíz
my_mc.onPress = function () {
this.play(); // reproduce la línea de tiempo del clip my_mc.
};
Sin embargo, el mismo código situado en la línea de tiempo raíz de una instancia de botón
reproduciría la línea de tiempo raíz:
my_btn.onPress = function () {
this.play(); // reproduce la línea de tiempo raíz
};
Para más información sobre el ámbito de la palabra clave this en los controladores de
eventos, consulte “Ámbito de la palabra clave this” en la página 324.
Ejemplo de ActionScript 2.0 La clase TextLoader siguiente se utiliza para cargar un archivo
de texto y muestra texto después de cargar correctamente el archivo.
// TextLoader.as
class TextLoader {
private var params_lv:LoadVars;
public function TextLoader() {
params_lv = new LoadVars();
params_lv.onLoad = onLoadVarsDone;
params_lv.load("http://www.helpexamples.com/flash/params.txt");
}
private function onLoadVarsDone(success:Boolean):Void {
_level0.createTextField("my_txt", 999, 0, 0, 100, 20);
_level0.my_txt.autoSize = "left";
_level0.my_txt.text = params_lv.monthNames; // undefined
}
}
Dentro de un controlador on() asociado a un clip de película, this hace referencia al clip
de película al que está asociado el controlador on(), como se muestra en el siguiente código:
// Asociado al clip de película denominado my_mc en la línea de tiempo
principal
on (press) {
trace(this); // _level0.my_mc
}
function clickHandler(eventObj:Object):Void {
trace("[" + eventObj.type + "] event on " + eventObj.target + "
instance.");
trace("\t this -> " + this);
}
El código anterior se divide en seis secciones (cada sección se separa por una línea en
blanco). La primera sección importa la clase Button (para el componente Button), así
como la clase Delegate. La segunda sección del código define una función a la que se
llamará cuando el usuario haga clic en algunos de los botones. La tercera sección del
código crea un objeto que se utiliza como un detector de eventos y el objeto detecta un
único evento, click.
Datos
Los datos son números, cadenas y otra información que puede manipular en Flash. La
utilización de datos suele ser esencial a la hora de crear aplicaciones y sitios Web. También
puede utilizar datos al crear gráficos avanzados y animaciones generadas mediante script, y es
posible que tenga que manipular los valores empleados para controlar los efectos.
Puede definir datos en variables dentro de Flash o cargar datos de archivos o sitios externos
mediante XML, servicios Web, clases ActionScript incorporadas, etc. Puede almacenar datos
en una base de datos y luego representar dicha información de diversas formas en un archivo
SWF. Entre ellas, puede mostrar la información en campos de texto o componentes, o bien
mostrar imágenes en instancias de clip de película.
327
Entre las formas más comunes de datos se encuentran las cadenas (secuencias de caracteres,
como pueden ser nombres o un texto), números, objetos (como, por ejemplo, clips de
película), valores booleanos (true y false), etc. En este capítulo, también se describen los
tipos de datos de Flash y cómo utilizarlos.
Para obtener información sobre los tipos de datos, consulte “Tipos de datos” en la página 328.
Para obtener información sobre las variables, consulte “Variables” en la página 343.
Tipos de datos
Un tipo de datos describe un dato y los tipos de operaciones que pueden realizarse con él. Los
datos se almacenan en variables. Puede utilizar tipos de datos al crear variables, instancias de
objetos y definiciones de funciones para asignar el tipo de datos que está manipulando. Al
escribir código ActionScript, se emplean muchos tipos de datos diferentes.
ActionScript 2.0 define varios tipos de datos que se utilizan con frecuencia. Los tipos de datos
describen el tipo de valor que puede contener una variable o un elemento de ActionScript.
Una variable asignada a un tipo de datos sólo puede contener un valor incluido entre el
conjunto de valores de dicho tipo de datos. Para obtener información sobre las variables,
consulte “Variables” en la página 343.
ActionScript dispone de un gran número de tipos básicos de datos que probablemente
utilizará con frecuencia en sus aplicaciones. Consulte la tabla en “Tipos de datos simples y
complejos” en la página 329 para más información.
ActionScript también dispone de clases principales, como Array y Date, que se consideran tipos
de datos complejos o de referencia. Para más información sobre tipos de datos complejos y de
referencia, consulte “Tipos de datos simples y complejos” en la página 329. Asimismo, todos los
tipos de datos y clases se definen íntegramente en Referencia del lenguaje ActionScript 2.0.
También puede crear clases personalizadas para las aplicaciones. Todas las clases que defina
utilizando la declaración class también se considerarán tipos de datos. Para más información
sobre clases principales y otros tipos de clases incorporadas, consulte “Clases de nivel superior
y clases incorporadas” en la página 258. Para más información sobre la creación de clases
personalizadas, consulte el Capítulo 6, “Clases”, en la página 195.
En ActionScript 2.0, se puede asignar tipos de datos a variables cuando se declaran. Los tipos
de datos que asigne podrán ser de cualquiera de los tipos principales o podrán ser clases
personalizadas creadas por usted. Para más información, consulte “Asignación de tipos de
datos y “strict data typing”” en la página 337.
Cuando se depuran scripts, a veces es necesario determinar el tipo de datos de una expresión o
variable para entender por qué se comporta de cierta manera. Esto se puede hacer con los
operadores instanceof y typeof (consulte “Determinación del tipo de datos” en la página 342).
null Simple. El tipo de datos null (nulo) contiene el valor null. Este valor
significa “ningún valor”, es decir, no hay datos. Puede asignar el valor
null en distintas situaciones para indicar que una propiedad o variable
no tiene ningún valor asignado. El tipo de datos null es el tipo de datos
predeterminado para todas las clases que definen tipos de datos
complejos. Una excepción a esta regla es la clase Object, que adopta de
manera predeterminada el valor undefined. Para más información,
consulte “Tipo de datos null (nulo)” en la página 334.
Number Simple. Este tipo de datos representa enteros, enteros sin signo y
números de coma flotante. Para almacenar un número de coma
flotante, debe incluir una coma decimal en el número. Sin la coma
decimal, el número se almacena como un entero. El tipo de datos
Number puede almacenar valores entre Number.MAX_VALUE (muy alto) y
Number.MIN_VALUE (muy bajo). Para más información, consulte
Referencia del lenguaje ActionScript 2.0 y “Tipo de datos Number
(número)” en la página 334
Void Complejo. El tipo de datos Void (vacío) sólo contiene un valor: void.
Este tipo de datos se usa para designar funciones que no devuelven un
valor. Void es un tipo de datos complejo que hace referencia al tipo de
datos Void simple. Para más información, consulte “Tipo de datos Void
(vacío)” en la página 337.
//Ocultar la etiqueta
welcome_lbl.visible = false;
El segundo ejemplo crea un clip de película denominado square_mc que utiliza la interfaz
API de dibujo para dibujar un rectángulo. Los controladores de eventos y los métodos
startDrag() y stopDrag() de la clase MovieClip se añaden para permitir que el rectángulo
pueda arrastrarse.
this.createEmptyMovieClip("square_mc", 1);
square_mc.lineStyle(1, 0x000000, 100);
square_mc.beginFill(0xFF0000, 100);
square_mc.moveTo(100, 100);
square_mc.lineTo(200, 100);
square_mc.lineTo(200, 200);
square_mc.lineTo(100, 200);
square_mc.lineTo(100, 100);
square_mc.endFill();
square_mc.onPress = function() {
this.startDrag();
};
square_mc.onRelease = function() {
this.stopDrag();
};
Para más información, consulte el Capítulo 11, “Trabajo con clips de película”, en la página
373 y la entrada MovieClip de Referencia del lenguaje ActionScript 2.0.
El objeto MovieClip de ActionScript tiene métodos que permiten controlar las instancias del
símbolo de clip de película en el escenario. En este ejemplo se utilizan los métodos play() y
nextFrame():
mcInstanceName.play();
mc2InstanceName.nextFrame();
Puede utilizar el operador de suma (+) para concatenar o unir dos cadenas. ActionScript trata
los espacios del comienzo o del final de una cadena como parte literal de la cadena. La
siguiente expresión incluye un espacio después de la coma:
var greeting_str:String = "Welcome, " + firstName;
Para incluir comillas en una cadena, coloque delante el carácter de barra inversa (\). A esto se
le llama utilizar una secuencia de escape en un carácter. Existen otros caracteres que no pueden
representarse en ActionScript, a menos que se utilice una secuencia de escape especial. En la
siguiente tabla se enumeran todos los caracteres de escape de ActionScript:
Secuencia de Carácter
escape
\b Carácter de retroceso (ASCII 8)
\f Carácter de salto de página (ASCII 12)
\n Carácter de avance de línea (ASCII 10)
\r Carácter de retorno de carro (ASCII 13)
\t Carácter de tabulación (ASCII 9)
\" Comillas dobles
\' Comillas simples
\\ Barra inversa
\000 - \377 Byte especificado en octal
\x00 - \xFF Byte especificado en hexadecimal
\u0000 - \uFFFF Carácter Unicode de 16 bits especificado en hexadecimal
Las cadenas en ActionScript son inmutables, al igual que en Java. Toda operación que
modifique una cadena devuelve una nueva cadena.
La clase String es una clase incorporada en ActionScript. Para obtener información sobre los
métodos y las propiedades de la clase String, consulte la entrada String en Referencia del
lenguaje ActionScript 2.0.
Si la aplicación tiene varios fotogramas, el código no se ejecuta una segunda vez, ya que la
variable init ha dejado de ser undefined (es decir, ya está definida).
Dado que x no se declaró mediante “strict data typing”, el compilador no podrá determinar el
tipo; para el compilador, la variable x puede tener un valor de cualquier tipo. (Consulte
“Asignación de un tipo de datos” en la página 339.) Una asignación posterior puede cambiar
el tipo de x; por ejemplo, la sentencia x = "hello" cambia el tipo de x a String (cadena).
una variable.
Puesto que las discordancias entre tipos de datos activan errores del compilador, “strict data
typing” le ayuda a encontrar errores en el código al compilar e impide que se asigne un tipo de
datos incorrecto a una variable existente. Durante la edición, “strict data typing” activa
sugerencias para el código en el editor de ActionScript (pero deberá seguir utilizando sufijos
de nombres de instancias para los elementos visuales).
“Strict data typing” garantiza que no se asigne accidentalmente un tipo de valor incorrecto a
una variable. Durante la compilación, Flash comprueba errores de discordancia entre los tipos
y muestra un mensaje de error si ha utilizado un tipo de valor erróneo. Por consiguiente, la
utilización de “strict typing” también contribuye a garantizar que no intente acceder a
propiedades o métodos que no forman parte del tipo de un objeto. El uso de “strict data
typing” implica que el editor de ActionScript muestre automáticamente sugerencias para el
código de los objetos.
Para más información sobre la creación de variables, consulte “Variables” en la página 343.
Para más información sobre la asignación de nombres a variables, consulte “Asignación de
nombre a variables” en la página 348. Para más información sobre la asignación de tipos de
datos y los tipos que puede asignar, consulte “Asignación de un tipo de datos” en
la página 339.
Puede encontrar un archivo de origen de ejemplo, datatypes.fla, en la carpeta Samples del
disco duro, que muestra cómo utilizar los tipos de datos en una aplicación.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\DataTypes.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/DataTypes.
Existen numerosas posibilidades para los tipos de datos, desde tipos de datos nativos, como
Number, String, Boolean, hasta clases incorporadas incluidas en Flash Player 8, como
BitmapData o FileReference, o incluso clases personalizadas escritas por usted u otros
desarrolladores. Los tipos de datos que es posible que tenga que especificar con más frecuencia
son los tipos de datos incorporados, como Number, String, Boolean, Array u Object, que se
muestran en los siguientes ejemplos de código.
Para asignar un tipo de datos específico a un elemento, especifique el tipo con la palabra clave
var y la sintaxis de signo de dos puntos posterior, como se muestra en el siguiente ejemplo:
// "Strict typing" de variable u objeto
var myNum:Number = 7;
var birthday:Date = new Date();
Puede declarar el tipo de datos de objetos basados en clases incorporadas (Button, Date, etc.)
así como las clases e interfaces que cree. En el siguiente ejemplo, si tiene un archivo llamado
Student.as en el que define la clase Student, puede especificar que los objetos que cree sean del
tipo Student:
var myStudent:Student = new Student();
Cuando Flash compila este script, se genera un error de coincidencia de tipos porque el
archivo SWF espera un valor booleano.
Si escribe una función que carece de tipo de devolución, puede especificar el tipo de
devolución Void para dicha función. O bien, si crea un acceso directo a una función, puede
asignar el tipo de datos Function a la nueva variable. Para especificar que los objetos son de
tipo Function o Void, consulte el siguiente ejemplo:
function sayHello(name_str:String):Void {
trace("Hello, " + name_str);
}
sayHello("world"); // Hello, world (Hola, mundo)
var greeting:Function = sayHello;
greeting("Augustus"); // Hello, Augustus (Hola, Augusto)
Otra de las ventajas de “strict data typing” es que Flash muestra de forma automática
sugerencias para el código para los objetos incorporados si se introducen con strict typing.
Para más información, consulte “Asignación de tipos de datos y “strict data typing”” en
la página 337.
Los archivos publicados mediante ActionScript 1.0 no respetan las asignaciones de “strict data
typing” al compilar, por lo que la asignación de un tipo de valor erróneo a una variable que ha
introducido con strict typing no genera un error del compilador.
var myNum:String = "abc";
myNum = 12;
/* No hay error en ActionScript 1.0, pero hay un error de coincidencia en
ActionScript 2.0 */
Verificación de tipos
La verificación de tipos se refiere a la comprobación de que el tipo de una variable y una
expresión sean compatibles. Por consiguiente, Flash comprueba que el tipo especificado para
una variable coincida con el valor o valores que les asigne. Para más información sobre “strict
data typing” y la asignación de tipos de datos, consulte “Asignación de tipos de datos y “strict
data typing”” en la página 337 y “Asignación de un tipo de datos” en la página 339.
La verificación de tipos puede tener lugar en la compilación o en la ejecución. Si utiliza “strict
data typing”, la verificación de tipos tiene lugar durante la compilación. Dado que
ActionScript es un lenguaje con tipos dinámicos, ActionScript puede también verificar los
tipos durante la ejecución.
Por ejemplo, el siguiente código no especifica el tipo de datos del parámetro xParam. Durante
la ejecución, se utiliza el parámetro para incluir un valor de tipo Number (número) y luego un
valor de tipo String (cadena). La función dynamicTest() utiliza posteriormente el operador
typeof para comprobar si el parámetro es de tipo String o Number.
function dynamicTest(xParam) {
if (typeof(xParam) == "string") {
var myStr:String = xParam;
trace("String: " + myStr);
} else if (typeof(xParam) == "number") {
var myNum:Number = xParam;
trace("Number: " + myNum);
}
}
dynamicTest(100);
dynamicTest("one hundred");
Para más información sobre estos operadores, consulte typeof operator y instanceof
operator en Referencia del lenguaje ActionScript 2.0. Para más información sobre los procesos
de prueba y depuración, consulte el Capítulo 18, “Depuración de aplicaciones”, en la página
753. Para más información sobre herencia e interfaces, consulte el Capítulo 7, “Herencia”, en
la página 275. Para más información sobre clases, consulte el Capítulo 6, “Clases”, en
la página 195.
Variables
Una variable es un contenedor que almacena información. En el siguiente código
ActionScript se muestra el aspecto de una variable en ActionScript:
var myVariable:Number = 10;
Esta variable contiene un valor numérico. El uso de :Number en el código anterior asigna el
tipo de valor que contiene dicha variable, denominado data typing (asignación de tipo a los
datos). Para más información sobre la escritura de datos, consulte “Asignación de tipos de
datos y “strict data typing”” en la página 337 y “Asignación de un tipo de datos” en
la página 339.
El contenedor (representado por el nombre de la variable) es siempre el mismo en todo el
código ActionScript, pero el contenido (el valor) puede cambiar. Puede cambiar el valor de
una variable en un script tantas veces como desee. Al cambiar el valor de una variable a
medida que se reproduce el archivo SWF, puede registrar y guardar información sobre las
acciones del usuario, registrar valores que cambian conforme se reproduce el archivo SWF o
comprobar si una determinada condición es true o false. Puede que sea necesario que la
variable se actualice continuamente mientras se reproduce el archivo SWF, como cuando
cambia la puntuación de un jugador en un juego de Flash. Las variables son esenciales cuando
se crea y manipula la interacción del usuario en un archivo SWF.
Variables 343
Cuando se declara una variable por primera vez, se recomienda asignarle un valor. La
asignación de un valor inicial se conoce como inicializar la variable, acción que normalmente
se realiza en el fotograma 1 de la línea de tiempo o desde dentro de una clase que se carga
cuando el archivo SWF comienza a reproducirse. Existen diferentes tipos de variables, que se
ven afectadas por el ámbito. Para más información sobre los diferentes tipos de variables y el
ámbito, consulte “Variables y ámbito” en la página 354.
distinta a Flash Player 6 y versiones anteriores. Si ha escrito scripts para Flash Player 6
y tiene previsto escribir o transferir scripts para Flash Player 7 o versiones posteriores,
deberá conocer estas diferencias para evitar un comportamiento inesperado.
Las variables pueden contener diferentes tipos de datos; para más información, consulte
“Tipos de datos” en la página 328. El tipo de datos que contiene una variable afecta al modo
en el que cambia el valor de la variable al asignar dicho valor en un script.
El tipo de información que habitualmente se guarda en una variable es una URL (tipo String -
cadena-), un nombre de usuario (tipo String), el resultado de una operación matemática (tipo
Number -número-), el número de veces que ocurre un evento (tipo Number) o si un usuario
ha hecho clic en un botón determinado (tipo Boolean -booleano-). Cada archivo SWF e
instancia de objeto (como, por ejemplo, un clip de película) tiene un conjunto de variables,
cada una de ellas con su propio valor independiente del de otras variables definidas en otros
archivos SWF o clips de película.
Para ver el valor de una variable, utilice la sentencia trace() que enviará el valor al panel
Salida. Seguidamente, el valor aparece en el panel Salida al comprobar el archivo SWF en el
entorno de prueba. Por ejemplo, trace(hoursWorked) envía el valor de la variable
hoursWorked al panel Salida en el entorno de prueba. También puede comprobar y establecer
los valores de las variables en el Depurador en el entorno de prueba.
Para más información sobre variables, consulte los temas siguientes:
■ “Declaración de variables” en la página 345
■ “Asignación de valores” en la página 345
■ “Asignación de nombre a variables” en la página 348
■ “Utilización de variables en una aplicación” en la página 349
■ “Variables y ámbito” en la página 354
Declaración de variables
Puede declarar variables en un fotograma de la línea de tiempo, directamente en un objeto o
en un archivo de clase externo.
Defina variables mediante la palabra clave var y siga las convenciones de denominación de
variables. Puede declarar una variable denominada firstName como se muestra en el
siguiente ejemplo:
var firstName:String;
Al declarar una variable, se asigna un tipo de datos a la variable. En este caso, se asigna el tipo
de datos String (cadena) a la variable firstName. Para más información sobre la asignación de
tipos de datos, consulte “Asignación de tipos de datos y “strict data typing”” en la página 337.
Valores predeterminados
Un valor predeterminado es el valor que contiene una variable antes de establecer su valor. Una
variable se inicializa al establecer su valor por primera vez. Si declara una variable pero no
establece su valor, dicha variable estará sin inicializar. Una variable no inicializada adopta de
manera predeterminada el valor undefined (no definido). Para más información sobre la
creación y utilización de variables, consulte “Variables” en la página 343.
Asignación de valores
Puede definir un valor como el contenido actual de una variable. El valor puede ser una
cadena, número, matriz, objeto, XML, fecha o incluso una clase personalizada creada por
usted. Recuerde que la declaración de una variable en Flash se realiza mediante la palabra clave
var. Al declarar la variable, se asigna también un tipo de datos a la variable. También puede
asignar un valor a una variable, siempre y cuando el valor coincida con el tipo de datos que
asigne a la variable.
En el siguiente ejemplo se muestra cómo podría crearse una variable denominada catName:
var catName:String;
Variables 345
Después de declarar la variable, puede asignarle un valor. Tras la línea de código ActionScript
anterior, podría incluir la siguiente:
catName = "Pirate Eye";
Dado que Pirate Eye es una cadena, el valor tiene que estar incluido entre comillas
NO T A
rectas (comillas).
En este ejemplo, se asigna el valor Pirate Eye a la variable catName. Al declarar la variable,
también puede asignarle un valor en lugar de asignárselo posteriormente (como en los
ejemplos anteriores). Puede establecer la variable catName al declararla, como se muestra en el
siguiente ejemplo:
var catName:String = "Pirate Eye";
Recuerde que el valor que asigne debe coincidir con el tipo de datos que le haya asignado (en
este caso, String). Si posteriormente intenta asignar un número a la variable catName como,
por ejemplo, catName = 10, verá el siguiente error en el panel Salida cuando compruebe el
archivo SWF:
Type mismatch in assignment statement: found Number where String is
required.
Este error indica que ha intentado establecer un tipo de datos erróneo para una variable
especificada.
Al asignar un valor numérico a una variable, las comillas no son necesarias, como se muestra
en el siguiente código:
var numWrinkles:Number = 55;
Al cambiar la asignación del valor de una variable existente, no es necesario utilizar la palabra
clave var ni definir el tipo de datos de la variable (:Number en este caso).
En el ejemplo anterior, la variable age contiene un valor entero (no decimal), aunque también
puede utilizar un valor decimal o de coma flotante como, por ejemplo, 38,4. Las variables
booleanas (como married -casado- o hasChildren -con hijos-) sólo tienen dos valores
posibles, true (verdadero) o false (falso).
Si desea crear una matriz y asignarle valores, el formato es ligeramente distinto, como se
muestra en el siguiente código:
var childrenArr:Array = new Array("Pylon", "Smithers", "Gil");
Existe una sintaxis alternativa (abreviada) para la creación de una matriz mediante operadores
de acceso a una matriz, que utilizan corchetes ([]). Puede reescribir el ejemplo anterior de la
siguiente forma:
var childrenArr:Array = ["Pylon", "Smithers", "Gil"];
Para más información sobre la creación de matrices y los operadores de acceso a una matriz,
consulte “Matrices” en la página 129 y “Utilización de la sintaxis con punto para referirse a
una instancia” en la página 81.
De igual forma, puede crear un objeto nuevo denominado myObj. Puede crear un objeto
nuevo de cualquiera de las siguientes formas. La primera forma (más larga) de codificar una
matriz es la siguiente:
var myObj:Object = new Object();
myObj.firstName = "Steve";
myObj.age = 50;
myObj.childrenArr = new Array("Mike", "Robbie", "Chip");
Como puede comprobar en este ejemplo, la utilización del método abreviado puede ahorrarle
tiempo y le evitará tener que introducir datos, particularmente al definir instancias de objetos. Es
importante familiarizarse con esta sintaxis alternativa, ya que se encontrará con ella si trabaja en
equipo o si utiliza código ActionScript de terceros que haya encontrado en Internet o en manuales.
No todas las variables requieren su definición explícita. Flash crea algunas variables
N O TA
automáticamente. Por ejemplo, para averiguar las dimensiones del escenario, podría
utilizar los valores de las siguientes variables predefinidas: Stage.width y
Stage.height.
Variables 347
Operadores y variables
Puede que se pregunte por el uso de símbolos matemáticos en el código. Los símbolos se
denominan operadores en ActionScript. Los operadores calculan un valor nuevo a partir
de uno o varios valores y un operador le permite asignar un valor a una variable del
código. El operador de igualdad (=) permite asignar un valor a una variable:
var username:String = "Gus";
Otro ejemplo es el operador de suma (+), que se utiliza para sumar dos o más valores
numéricos y generar un nuevo valor. Si utiliza el operador + en dos o más valores de cadena,
las cadenas se concatenarán. Los valores que manipulan los operadores se denominan
operandos.
Al asignar un valor, se utiliza un operador para definir el valor de una variable. Por ejemplo,
en el siguiente script se utiliza el operador de asignación para asignar el valor 7 a la variable
numChildren:
var numChildren:Number = 7;
■ Una variable no puede ser una palabra clave ni un literal de ActionScript, como true,
false, null o undefined. Para más información sobre el uso de literales, consulte
“Literales” en la página 94.
El editor de ActionScript admite las sugerencias de código para las clases incorporadas y para
las variables basadas en dichas clases. Si desea que Flash proporcione sugerencias de código
para un tipo de objeto determinado que usted asigna a una variable, puede introducir una
variable con “strict typing”. Las sugerencias para el código ofrecen una sintaxis al estilo de la
información sobre herramientas y un menú emergente que le ayuda a escribir el código
rápidamente.
Por ejemplo, escriba el código siguiente:
var members:Array = new Array();
members.
En cuanto escriba el punto (.) en el panel Acciones, Flash mostrará una lista de métodos y
propiedades disponibles para los objetos Array.
Para conocer las convenciones de codificación recomendadas en la asignación de nombre a las
variables, consulte “Asignación de nombre a variables” en la página 780
Variables 349
Si se utiliza una variable no definida, como en el ejemplo siguiente, el valor de la variable en
Flash Player 7 y versiones posteriores será NaN y el script podría producir resultados
imprevistos:
var squared:Number = myNum * myNum;
trace(squared); // NaN
var myNum:Number = 6;
En el ejemplo siguiente, la sentencia que declara e inicializa la variable myNum debe ir al
principio, de modo que squared pueda sustituirse por un valor:
var myNum:Number = 6;
var squared:Number = myNum * myNum;
trace(squared); // 36
Ocurre lo mismo al pasar una variable no definida a un método o a una función, como se
muestra a continuación.
4. Seleccione Control > Probar película y observe que el botón no funciona (no abre la página
Web).
5. Arrastre otro componente Button al escenario. Seleccione el botón.
6. Abra el inspector de propiedades y escriba good_button en el cuadro de texto Nombre de
instancia.
7. Añada el siguiente código ActionScript al fotograma 1 de la línea de tiempo (detrás del
código ActionScript que ha añadido anteriormente):
// Funciona
function goodClickListener(evt:Object):Void {
var targetUrl:String = "http://www.macromedia.com";
getURL(targetUrl);
}
good_button.addEventListener("click", goodClickListener);
Al cambiar myNum a 30 (en la línea 3 del código), el valor de otherNum continúa siendo 15
porque otherNum no busca su valor en myNum. La variable otherNum contiene el valor de
myNum que recibe (en la línea 2 del código).
3. Seleccione Control > Probar película para ver cómo se muestran los valores en el panel
Salida.
4. Ahora añada el siguiente código ActionScript tras el código añadido en el paso 2:
function sqr(myNum:Number):Number {
myNum *= myNum;
return myNum;
}
var inValue:Number = 3;
var outValue:Number = sqr(inValue);
trace(inValue); // 3
trace(outValue); // 9
En este código, la variable inValue contiene un valor simple, 3, de modo que el valor se
pasa a la función sqrt() y el valor que devuelve es 9. El valor de la variable inValue no
cambia, aunque sí cambia el valor de myNum en la función.
Variables 351
5. Seleccione Control > Probar película para ver cómo se muestran los valores en el panel
Salida.
Los tipos de datos Object pueden incluir una gran cantidad de información tan compleja que
una variable con este tipo de dato no contiene el valor real, sino una referencia a un valor. Esta
referencia es como un alias que apunta al contenido de la variable. Cuando la variable necesita
conocer su valor, la referencia solicita el contenido y devuelve la respuesta sin transferir el valor
a la variable.
Para obtener información sobre el paso de una variable por referencia, consulte “Paso de una
variable por referencia” en la página 352.
Variables 353
Variables y ámbito
El ámbito de una variable se refiere al área en la que se conoce la variable (área en la que está
definida) y se puede hacer referencia a ella. El área en la que se conoce la variable puede estar
dentro de una determinada línea de tiempo o dentro de una función, o podría conocerse
globalmente en toda la aplicación. Para más información sobre el ámbito, consulte “Ámbito y
referencias” en la página 86.
Comprender en qué consiste el ámbito de las variables es importante a la hora de desarrollar
aplicaciones Flash con ActionScript. El ámbito no sólo indica cuándo y dónde puede hacer
referencia a las variables, sino también el tiempo durante el cual una determinada variable existe
en una aplicación. Al definir variables en el cuerpo de una función, éstas dejan de existir al
finalizar la función especificada. Si intenta hacer referencia a objetos de un ámbito erróneo o a
variables que han caducado, aparecerán errores en los documentos de Flash que provocarán un
comportamiento inesperado o que no esté disponible una determinada funcionalidad.
ActionScript contiene tres tipos de ámbitos de variable:
■ Las funciones y las Variables globales son visibles para todas las líneas de tiempo y todos
los ámbitos del documento. Por consiguiente, una variable global se define en todas las
áreas del código.
■ Las Variables de línea de tiempo están disponibles para cualquier script de dicha línea de
tiempo.
■ Las Variables locales están disponibles en el cuerpo de la función en la que se han
declarado (incluidas entre llaves). Por consiguiente, las variables locales sólo se definen en
una parte del código.
Para obtener directrices de utilización de ámbitos y variables, consulte el Capítulo 4, “Ámbito
y referencias”, en la página 86.
Las clases de ActionScript 2.0 que crea el usuario son compatibles con los ámbitos de
NO T A
No puede utilizar “strict data typing” en las variables globales. Para más información, consulte
“Variables globales” en la página 355.
Sin embargo, si inicializa una variable local con el mismo nombre que la variable global, no
tendrá acceso a la variable global mientras se encuentre en el ámbito de la variable local, como
se muestra en el siguiente ejemplo:
_global.counter = 100; // Declara la variable global
trace(counter); // Accede a la variable global y muestra 100
function count():Void {
for (var counter:Number = 0; counter <= 2; counter++) { // Variable local
trace(counter); // Accede a la variable local y muestra de 0 a 2
}
}
count();
trace(counter); // Accede a la variable global y muestra 100
No se puede asignar “strict data typing” a variables que crea en el ámbito _global, ya que tiene
que utilizar la palabra clave var al asignar un tipo de datos. Por ejemplo, no podría hacer:
_global.foo:String = "foo"; //error de sintaxis
var _global.foo:String = "foo"; //error de sintaxis
Variables 355
Variables de línea de tiempo
Las variables de línea de tiempo están disponibles para cualquier script de dicha línea de
tiempo. Para declarar variables de línea de tiempo, utilice la sentencia var e inicialícelas en
cualquier fotograma de la línea de tiempo. La variable está disponible para dicho fotograma y
todos los fotogramas posteriores, como se muestra en el ejemplo siguiente.
Variables locales
Al utilizar la sentencia var dentro de un bloque de función, se declaran las variables locales. Al
declarar una variable local dentro de un bloque de función (también conocido como
definición de función), se define dentro del ámbito del bloque de función y caduca al final de la
función de bloque. Por consiguiente, la variable local sólo existe dentro de dicha función.
Si el nombre de la variable que utiliza para su variable local ya está declarada como variable de
línea de tiempo, la definición local tendrá prioridad sobre la definición de línea de tiempo
mientras la variable local se encuentre en el ámbito. La variable de línea de tiempo continuará
existiendo fuera de la función. Por ejemplo, el siguiente código crea una variable de cadena de
línea de tiempo denominada str1 y luego crea una variable local con el mismo nombre
dentro de la función scopeTest(). La sentencia trace situada dentro de la función genera la
definición local de la variable, pero la sentencia trace situada fuera de la función genera la
definición de línea de tiempo de la variable.
var str1:String = "Timeline";
function scopeTest():Void {
var str1:String = "Local";
trace(str1); // Local
}
scopeTest();
trace(str1); // Línea de tiempo
En el siguiente ejemplo se observa cómo determinadas variables sólo existen mientras existe
una función determinada y pueden provocar errores si intenta hacer referencia a la variable
fuera del ámbito de dicha función.
Variables 357
Las variables i y j se utilizan con frecuencia como contadores de bucles. En el siguiente
ejemplo, i se utiliza como variable local; solamente existe dentro de la función initArray():
var myArr:Array = new Array();
function initArray(arrayLength:Number):Void {
var i:Number;
for(i = 0; i < arrayLength; i++) {
myArr[i] = i + 1;
}
}
trace(myArr); // <blank>
initArray(3);
trace(myArr); // 1,2,3
trace(i); // undefined (no definido)
También es habitual ver la siguiente sintaxis para un bucle for: for (var i:Number =
NO TA
Carga de variables
En las siguientes secciones, cargará variables del servidor de diversas formas o en un
documento de una cadena de URL o FlashVars (puede utilizar FlashVars para pasar variables a
Flash) en el código HTML. Estas prácticas demuestran que existen diversas formas de utilizar
variables fuera de un archivo SWF.
Encontrará más información sobre la carga de variables (como, por ejemplo, pares nombre/
valor) en el Capítulo 16, “Trabajo con datos externos”, en la página 671.
4. Seleccione Control > Probar película para probar el archivo SWF en Flash Player.
El campo de texto muestra undefined. Si desea asegurarse de que las variables están bien
definidas antes de continuar, deberá comprobar la existencia de las variables en Flash. Para
ello, puede comprobar si están sin definir (undefined).
5. Para comprobar si la variable está definida, modifique el código ActionScript que ha
añadido al panel Acciones en el paso 3 para que coincida con el siguiente código. Añada el
código que aparece en negrita:
this.createTextField("myTxt", 100, 0, 0, 100, 20);
myTxt.autoSize = "left";
if (_level0.myURL == undefined) {
myTxt.text = "myURL is not defined";
} else {
myTxt.text = _level0.myURL;
}
Variables 359
Al publicar el documento de Flash, se crea un documento HTML de manera
predeterminada en el mismo directorio que el archivo SWF. Si no se crea un archivo
HTML, seleccione Archivo > Configuración de publicación y asegúrese de que selecciona
HTML en la ficha Formatos. Seguidamente, publique de nuevo el documento.
El siguiente código muestra el código HTML del documento responsable de la
incorporación de un documento de Flash a una página HTML. Debe examinar este
código HTML para comprender cómo funcionan las variables de URL en el siguiente
paso (donde añade código adicional para las variables de URL).
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400"
id="urlvariables" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="urlvariables.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="urlvariables.swf" quality="high" bgcolor="#ffffff"
width="550" height="400" name="urlvariables" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
6. Para pasar variables del documento HTML generado al documento de Flash, puede pasar
variables tras la ruta y el nombre de archivo (urlvariables.swf). Añada el texto en negrita al
archivo HTML que se ha generado en el escritorio.
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400"
id="urlvariables" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="urlvariables.swf?myURL=http://
weblogs.macromedia.com" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="urlvariables.swf?myURL=http://weblogs.macromedia.com"
quality="high" bgcolor="#ffffff" width="550" height="400"
name="urlvariables" align="middle" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash" pluginspage="http://
www.macromedia.com/go/getflashplayer" />
</object>
7. Si desea pasar varias variables a Flash, deberá separar los pares nombre/valor mediante un
carácter ampersand (&). Localice el siguiente código del paso 6:
?myURL=http://weblogs.macromedia.com
consulte la Nota técnica de Flash, URL Encoding: Reading special characters from a
text file.
Dado que el ampersand (&) actúa a modo de delimitador entre los diferentes pares
nombre/valor, si los valores que desea pasar contienen ampersands, podrían producirse
resultados inesperados. Dada la naturaleza de los pares nombre/valor y del análisis, si
pasara los siguientes valores a Flash:
my.swf?name=Ben+&+Jerry&flavor=Half+Baked
Para evitar esto, deberá anular (escape) el carácter ampersand (&) del par nombre/valor con
su equivalente con codificación URL (%26).
8. Abra el documento urlvariables.html y localice el siguiente código:
?myURL=http://weblogs.macromedia.com&myTitle=Macromedia+News+Aggregator
Variables 361
Utilización de FlashVars en una aplicación
La utilización de FlashVars para pasar variables a Flash es parecido a pasar variables en la URL
en el código HTML. Con FlashVars, en lugar de pasar variables después del nombre de
archivo, éstas se pasan en una etiqueta param independiente, así como en la etiqueta embed.
myflashvars.fla.
4. Seleccione Archivo > Publicar para publicar los archivos SWF y HTML.
5. Abra el directorio que contiene los archivos publicados (el lugar del disco duro en el que
guardó myflashvars.fla) y abra el documento HTML (de manera predeterminada,
myflashvars.html) en un editor HTML como Dreamweaver o el Bloc de notas.
6. Añada el código que aparece debajo en negrita para que el documento HTML coincida con
lo siguiente:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400" id="myflashvars"
align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="myflashvars.swf" />
<param name="FlashVars" value="myURL=http://weblogs.macromedia.com/">
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="myflashvars.swf" FlashVars="myURL=http://
weblogs.macromedia.com/" quality="high" bgcolor="#ffffff" width="550"
height="400" name="myflashvars" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Variables 363
Este código carga un archivo de texto de un servidor remoto y analiza los pares nombre/
valor.
Descargue o vea el archivo de texto (http://www.helpexamples.com/flash/
S UG E R E NC I A
Variables 365
5. Si comprueba el documento en la herramienta Flash (seleccione Control > Probar película)
o en un navegador local (Archivo > Vista previa de publicación > HTML), observará que
la imagen se centra vertical y horizontalmente en el escenario.
6. Edite el documento HTML generado en un editor (como Dreamweaver o el Bloc de notas)
y modifique el código HTML para que coincida con el siguiente texto:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="550" height="400"
id="urlvariables" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="urlvariables.swf" />
<param name="FlashVars" value="imgURL=http://www.helpexamples.com/flash/
images/image2.jpg">
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="urlvariables.swf" quality="high" FlashVars="imgURL=http://
www.helpexamples.com/flash/images/image2.jpg" bgcolor="#ffffff"
width="550" height="400" name="urlvariables" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
7. Pruebe el documento HTML para ver los cambios. La imagen que especifique en el código
HTML aparecerá en el archivo SWF.
Para modificar este ejemplo y utilizar sus propias imágenes, modificaría el valor FlashVars
(la cadena dentro de las comillas dobles).
Este código, que es una forma de crear un objeto sencillo, crea una nueva instancia de
objeto y define una serie de propiedades dentro del objeto.
3. Ahora introduzca el siguiente código ActionScript tras el código introducido en el paso 2.
// La segunda forma
var secondObj:Object = {firstVar:"hello world", secondVar:28,
thirdVar:new Date(1980, 0, 1)};
Esta es otra forma de crear un objeto. Ambos objetos son equivalentes. Este código crea un
nuevo objeto e inicializa algunas propiedades utilizando la notación abreviada de objeto.
4. Para reproducir de forma indefinida cada uno de los objetos anteriores y mostrar el
contenido de los objetos, añada el siguiente código ActionScript al fotograma 1 de la línea
de tiempo (detrás del código que ya ha introducido):
var i:String;
for (i in firstObj) {
trace(i + ": " + firstObj[i]);
}
También puede utilizar matrices para crear objetos. En lugar de utilizar una serie de variables,
como firstname1, firstname2 y firstname3, para representar un conjunto de variables,
puede crear una matriz de objetos para representar los mismos datos. A continuación se ofrece
una demostración de esta técnica.
La ventaja de organizar variables en matrices y objetos es que resulta mucho más fácil
reproducir indefinidamente las variables y ver los valores, como se muestra en el paso
siguiente.
3. Escriba el siguiente código detrás del código ActionScript añadido en el paso 2.
var i:Number;
for (i = 0; i < usersArr.length; i++) {
trace(usersArr[i].firstname); // George, John, Thomas
}
4. Seleccione Control > Probar película para que aparezca el siguiente texto en el panel Salida:
George
John
Thomas
Conversión
ActionScript 2.0 permite convertir un tipo de datos en otro. Convertir un objeto a un tipo
diferente consiste en convertir el valor que contiene el objeto o la variable a un tipo diferente.
Los resultados de una conversión de tipo dependen de los tipos de datos de que se trate. Para
convertir un objeto a otro tipo, deberá incluir el nombre del objeto entre paréntesis (()) y
anteponerle el nombre del nuevo tipo. Por ejemplo, el siguiente código toma un valor
booleano y lo convierte en un entero.
var myBoolean:Boolean = true;
var myNumber:Number = Number(myBoolean);
Conversión 369
Conversión de objetos
La sintaxis de conversión es type(item), donde se pretende que el compilador se comporte
como si el tipo de datos de item fuese type. La conversión es básicamente una llamada de
función que devuelve null si la conversión falla en tiempo de ejecución (lo que ocurre en
archivos publicados para Flash Player 7 o posterior; los archivos publicados para Flash Player 6
no contemplan errores de conversión en tiempo de ejecución). Si la conversión se lleva a cabo
correctamente, la llamada de función devuelve el objeto original. No obstante, el compilador
no puede determinar si una conversión fallará en tiempo de ejecución, por lo que no genera
errores de tiempo de compilación en estos casos.
El siguiente código muestra un ejemplo:
// Both the Cat and Dog classes are subclasses of the Animal class
function bark(myAnimal:Animal) {
var foo:Dog = Dog(myAnimal);
foo.bark();
}
var curAnimal:Animal = new Dog();
bark(curAnimal); // Funciona
curAnimal = new Cat();
bark(curAnimal); // No funciona
En este ejemplo, ha afirmado al compilador que foo es un objeto Dog y, por lo tanto, el
compilador da por hecho que temp.bark() es una sentencia válida. Sin embargo, el
compilador no sabe que la conversión fallará (es decir, que ha intentado convertir un objeto
Cat en un tipo Animal), por lo que no se produce ningún error de tiempo de compilación. No
obstante, si incluye una comprobación en el script para asegurarse de que la conversión se lleva
a cabo correctamente, se podrán detectar errores de conversión durante la ejecución, como se
muestra en el siguiente ejemplo.
function bark(myAnimal:Animal) {
var foo:Dog = Dog(myAnimal);
if (foo) {
foo.bark();
}
}
Puede convertir una expresión en una interfaz. Si la expresión es un objeto que implementa la
interfaz, o tiene una clase base que implementa la interfaz, la conversión se realiza
correctamente. De no ser así, la conversión falla.
Para más información sobre funciones de conversión, consulte la entrada de cada función de
conversión en Referencia del lenguaje ActionScript 2.0: Array function, Boolean function,
Number function, Object function y String function.
Conversión 371
372 Datos y tipos de datos
11
CAPÍTULO 11
Los clips de película son una especie de archivos SWF con contenido propio que se ejecutan de
manera independiente y al margen de la línea de tiempo en la que se encuentran. Por ejemplo, si
la línea de tiempo principal sólo tiene un fotograma y un clip de película de dicho fotograma
tiene diez fotogramas, cuando se reproduzca el archivo SWF principal se reproducirán todos los
fotogramas del clip de película. Un clip de película puede, a su vez, contener otros clips de
película o clips anidados. Los clips de película anidados de esta manera tienen una relación
jerárquica, en la cual el clip principal contiene uno o varios clips secundarios.
Puede asignar nombre a las instancias de clip de película para identificarlas de manera unívoca
como objetos que pueden controlarse con ActionScript. Cuando se asigna un nombre de
instancia a una instancia de un clip de película, el nombre de instancia la identifica como
objeto de clase MovieClip. Para controlar el aspecto y el comportamiento de los clips de
película en tiempo de ejecución, utilice las propiedades y los métodos de la clase MovieClip.
Los clips de película vienen a ser objetos autónomos que pueden responder a eventos, enviar
mensajes a otros objetos de clip de película, mantener su estado y controlar sus clips
secundarios. De este modo, los clips de película proporcionan la base de una arquitectura
basada en componentes en Macromedia Flash Basic 8 y Macromedia Flash Professional 8. De
hecho, los componentes disponibles en el panel Componentes (Ventana > Componentes) son
clips de película sofisticados que han sido diseñados y programados para tener un aspecto y un
comportamiento concretos.
Para más información sobre la utilización de la API de dibujo (métodos de dibujo de la clase
MovieClip), filtros, mezclas, animación mediante scripts, etc., consulte el Capítulo 13,
“Animaciones, filtros y dibujos”
Para más información sobre clips de película, consulte los temas siguientes:
Control de clips de película con ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Llamada a varios métodos en un solo clip de película . . . . . . . . . . . . . . . . . . . . . . . . 376
Carga y descarga de archivos SWF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Modificación de la posición y el aspecto de un clip de película . . . . . . . . . . . . . . . 380
Clips de película que se pueden arrastrar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
373
Creación de clips de película en tiempo de ejecución . . . . . . . . . . . . . . . . . . . . . . . .383
Adición de parámetros a clips de película creados de forma dinámica . . . . . . . . . 387
Gestión de las profundidades de los clips de película . . . . . . . . . . . . . . . . . . . . . . . 390
Asignación de caché y desplazamiento de clips de película con ActionScript. . .393
Utilización de clips de película como máscaras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Gestión de eventos de clip de película. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Asignación de una clase a un símbolo de clip de película . . . . . . . . . . . . . . . . . . . . 404
Inicialización de las propiedades de clase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
El script se comporta como si a las sentencias que hay en la sentencia with se las llamara desde
la línea de tiempo de la instancia hole. El código anterior equivale al siguiente ejemplo:
donut.hole._alpha = 20;
donut.hole._xscale = 150;
donut.hole._yscale = 150;
En el siguiente ejemplo, el archivo SWF cargado, contents.swf, también declara una variable
denominada userName en su línea de tiempo raíz:
// En contents.swf:
_root.userName = "Mary";
Este paso garantiza que las referencias a _root existentes en contents.swf (o en cualquier
archivo SWF cargado en target_mc) hagan referencia a su propia línea de tiempo, no a la
línea de tiempo raíz de container.swf. Ahora, al hacer clic en el botón, aparece "Tim".
Como alternativa, el autor de contents.swf podría añadir el código siguiente a su línea de
tiempo principal:
// Añadido al fotograma 1 de contents.swf:
this._lockroot = true;
Esto garantizaría que, al margen de donde estuviera cargada contents.swf, las referencias que
hiciera a _root se aplicarían a su propia línea de tiempo principal, no a la línea de tiempo del
archivo SWF que aloja.
Para más información, consulte _lockroot (propiedad MovieClip._lockroot).
Algunas propiedades, llamadas propiedades de sólo lectura, tienen valores que se pueden leer
pero no establecer. (Estas propiedades se especifican como de sólo lectura en las
correspondientes entradas de Referencia del lenguaje ActionScript 2.0.) A continuación, se
muestran propiedades de sólo lectura: _currentframe, _droptarget, _framesloaded,
_parent, _target, _totalframes, _url, _xmouse e _ymouse.
Puede escribir sentencias para establecer cualquier propiedad que no sea de sólo lectura.
La sentencia siguiente establece la propiedad _alpha de la instancia de clip de película
wheel_mc, que es secundaria de la instancia car_mc:
car_mc.wheel_mc._alpha = 50;
Además, puede escribir sentencias que obtengan el valor de una propiedad de clip de película.
Por ejemplo, la sentencia siguiente obtiene el valor de la propiedad _xmouse de la línea de
tiempo del nivel actual y establece la propiedad _x de la instancia my_mc en ese valor:
this.onEnterFrame = function() {
my_mc._x = _root._xmouse;
};
Las propiedades _x, _y, _rotation, _xscale, _yscale, _height, _width, _alpha y
_visible se ven afectadas por las transformaciones del elemento principal del clip de película
y modifican el clip de película y cualquiera de los elementos secundarios del clip. Las
propiedades _focusrect, _highquality, _quality y _soundbuftime son globales,
solamente pertenecen al nivel 0 de la línea de tiempo principal. Todas las demás propiedades
pertenecen a cada clip de película o nivel cargado.
Puede encontrar una muestra de aplicación de galería de fotos en el disco duro. Este archivo
proporciona un ejemplo de cómo utilizar ActionScript para controlar dinámicamente clips de
película mientras se cargan archivos de imagen en un archivo SWF, que añade la función de
arrastre a cada clip de película. El archivo de origen de muestra, gallery_tween.fla, se puede
encontrar en la carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Galleries.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Galleries.
Con el código siguiente se crea un nuevo clip de película, denominado canvas_mc, en la línea
de tiempo raíz del archivo SWF en el que se ejecuta el script y, a continuación, se activa la
acción loadMovie() para cargar en ella un archivo JPEG externo:
this.createEmptyMovieClip("canvas_mc", 10);
canvas_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");
Para ver un ejemplo de archivo de origen que crea y elimina varios clips de película en tiempo
de ejecución, puede encontrar un archivo de origen de muestra, animation.fla, en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Animation.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Animation.
Con el parámetro initObject se especifica el nombre del objeto cuyos parámetros se van a
utilizar para rellenar el clip de película creado de forma dinámica.
6. Seleccione Edición > Editar documento para volver a la línea de tiempo principal.
7. Seleccione el símbolo de clip de película de la biblioteca y, a continuación, seleccione
Vinculación en el menú emergente Biblioteca.
Aparecerá el cuadro de diálogo Propiedades de vinculación.
8. Seleccione Exportar para ActionScript y Exportar en primer fotograma.
9. Escriba dynamic_id en el cuadro de texto Identificador y haga clic en Aceptar.
Este ejemplo crea un nuevo clip de película con la profundidad 10 en el espacio de orden z de
container_mc.
El código siguiente asocia dos nuevos clips de película a container_mc. El primer clip,
llamado clip1_mc, se representa detrás de clip2_mc, puesto que se le asignó un valor inferior
de profundidad.
container_mc.attachMovie("symbolID", "clip1_mc", 10);
container_mc.attachMovie("symbolID", "clip2_mc", 15);
Los valores de profundidad para los clips de película pueden oscilar entre -16384 y 1048575.
Si crea o asocia un nuevo clip de película en una profundidad que ya tiene un clip de película,
el clip nuevo o asociado sobrescribirá el contenido del existente. Para evitar este problema,
emplee el método MovieClip.getNextHighestDepth(); sin embargo, no debe emplear este
método con componentes que utilicen un sistema de gestión de profundidad distinto. En su
lugar, utilice “Clase DepthManager” con instancias de componentes.
La clase MovieClip ofrece varios métodos para gestionar profundidades de clips de película;
para más información, consulte getNextHighestDepth (método
MovieClip.getNextHighestDepth), getInstanceAtDepth (método
MovieClip.getInstanceAtDepth), getDepth (método MovieClip.getDepth) y
swapDepths (método MovieClip.swapDepths) en Referencia del lenguaje ActionScript 2.0.
En este caso, la variable denominada nextDepth contiene el valor 11, puesto que es el
siguiente valor de profundidad superior disponible para el clip de película edit_mc.
No utilice MovieClip.getNextHighestDepth() con componentes; en su lugar, emplee el
gestor de profundidad. Para más información, consulte “Clase DepthManager” en Referencia
del lenguaje de componentes. Para más información sobre
MovieClip.getNextHighestDepth(), consulte getNextHighestDepth (método
MovieClip.getNextHighestDepth).
Para obtener el valor actual más alto de profundidad ocupado, reste 1 al valor devuelto por
getNextHighestDepth(), tal como se muestra en la sección siguiente.
El código siguiente se repite en todos los clips de película de la línea de tiempo principal de un
archivo SWF y muestra el nombre de instancia y el valor de profundidad correspondiente de
cada clip en el panel Salida:
for (var item:String in _root) {
var obj:Object = _root[item];
if (obj instanceof MovieClip) {
var objDepth:Number = obj.getDepth();
trace(obj._name + ":" + objDepth)
}
}
Puede actualizar los datos vectoriales, momento en el cual se recrea la superficie. Por
NO TA
consiguiente, los datos vectoriales para los que se asigna la caché en la superficie no
tienen porqué permanecer intactos durante todo el archivo SWF.
Puede utilizar código ActionScript para activar la caché o el desplazamiento, así como para
controlar fondos. Puede utilizar el inspector de propiedades para activar la caché de una
instancia de clip de película. Para guardar en caché clips de película o botones sin utilizar
ActionScript, puede seleccionar la opción Utilizar caché de mapa de bits en el inspector de
propiedades.
La siguiente tabla contiene descripciones breves de las nuevas propiedades para las instancias
de clip de película:
Propiedad Descripción
cacheAsBitmap Hace que la instancia de clip de película almacene en caché una
representación de mapa de bits de sí misma. Flash crea un objeto de
superficie para la instancia, que es un mapa de bits almacenado en
caché en lugar de los datos vectoriales. Si cambia los límites del clip de
película, la superficie se recrea en lugar de modificarse su tamaño. Para
más información y ver un ejemplo, consulte “Asignación de caché para
un clip de película” en la página 398.
Estas tres propiedades son independientes entre sí, sin embargo, las propiedades
opaqueBackground y scrollRect funcionan mejor cuando un objeto está almacenado en
caché como mapa de bits. Sólo se obtienen ventajas de rendimiento de las propiedades
opaqueBackground y scrollRect cuando se establece cacheAsBitmap como true.
Para crear una superficie que también sea desplazable, debe establecer las propiedades
cacheAsBitmap y scrollRect para la instancia del clip de película. Las superficies pueden
anidarse dentro de otras superficies. La superficie copia el mapa de bits en su superficie
principal.
Para obtener información sobre el enmascaramiento del canal alfa, que requiere que establezca
la propiedad cacheAsBitmap como true, consulte “Enmascaramiento del canal alfa” en
la página 403.
dentro de un clip de película para poder hacer uso de esta función. Para ver un ejemplo,
consulte el archivo de muestra en directorio de instalación de Flash\Samples and
Tutorials\Samples\ActionScript\FlashType.
Puede consultar un archivo de origen de ejemplo que muestra cómo se puede aplicar la caché
de mapa de bits a una instancia. Busque el archivo denominado cacheBitmap.fla en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\CacheBitmap.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/CacheBitmap.
Puede consultar un archivo de origen de ejemplo que muestra cómo se puede aplicar la caché
de mapa de bits a una instancia. Busque el archivo denominado cacheBitmap.fla en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\CacheBitmap.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/CacheBitmap.
También puede consultar un archivo de origen de ejemplo que muestra cómo aplicar la caché
de mapa de bits al texto desplazable. Busque el archivo denominado flashtype.fla en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\FlashType.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/FlashType.
this.createEmptyMovieClip("img_mc", 10);
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip):Void {
target_mc.setMask(mask_mc);
}
var my_mcl:MovieClipLoader = new MovieClipLoader();
my_mcl.addListener(mclListener);
my_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg",
img_mc);
7. Seleccione Control > Probar película para probar el documento.
Un archivo JPEG externo se carga en el archivo SWF durante la ejecución y queda
enmascarado por la figura que ha dibujado anteriormente en el escenario.
Para obtener información detallada, consulte setMask (método MovieClip.setMask) en
Referencia del lenguaje ActionScript 2.0.
Al probar el documento (Control > Probar película), el enmascarado se mezcla con alfa a
través de la máscara.
Las capas de máscara no admiten el enmascaramiento del canal alfa. Debe utilizar
N O TA
código ActionScript para aplicar una máscara y utilizar la caché de mapa de bits en
tiempo de ejecución.
3. Guarde el trabajo.
4. Cree un nuevo documento de Flash y guárdelo como MoveRightDistance.fla en el mismo
directorio que el del archivo de clase.
5. Cree un símbolo de clip de película que contenga una forma vectorial, como un óvalo, y
elimine todo el contenido del escenario.
Sólo necesita un símbolo de clip de película en la biblioteca para este ejemplo.
6. En el panel Biblioteca, haga clic con el botón derecho (Windows) o haga clic con la tecla
Control presionada (Macintosh) en el símbolo y seleccione Vinculación en el menú
contextual.
7. Asigne el identificador de vinculación Ball al símbolo.
8. Escriba MoveRightDistance en el cuadro de texto Clase de AS 2.0.
9. Añada el código siguiente al fotograma 1 de la línea de tiempo:
this.attachMovie("Ball", "ball50_mc", 10, {distance:50});
this.attachMovie("Ball", "ball125_mc", 20, {distance:125});
Este código crea dos nuevas instancias del símbolo en la línea de tiempo raíz del archivo
SWF. La primera instancia, denominada ball50_mc, se mueve 50 píxeles cada vez que se
hace clic en ella; la segunda, denominada ball125_mc, se mueve 125 píxeles cada vez que
se hace clic en ella.
10. Seleccione Control > Probar película para probar el archivo SWF.
Utilización de texto y
cadenas
12
Muchas de las aplicaciones, presentaciones o gráficos que cree con Macromedia Flash
Professional 8 o Macromedia Flash Basic 8 incluirán algún tipo de texto. Puede utilizar
muchos tipos de texto diferentes. Podría utilizar texto estático en los diseños y texto dinámico
para fragmentos de texto de mayor tamaño. O bien podría utilizar texto de entrada para
capturar la entrada del usuario y texto en una imagen para el diseño del fondo. Puede crear
campos de texto con la herramienta de edición de Flash o mediante ActionScript.
Una forma de mostrar texto consiste en manipular cadenas mediante código antes de que se
carguen y aparezcan en el escenario durante la ejecución. Existen varias formas de utilizar
cadenas en una aplicación, como, por ejemplo, enviarlas a un servidor y recuperar una
respuesta, analizar cadenas de una matriz o validar cadenas introducidas por un usuario en un
campo de texto.
En este capítulo se describen varias formas de utilizar texto y cadenas en las aplicaciones,
prestando especial atención al uso de código para manipular texto.
En la siguiente lista se describe la terminología utilizada en este capítulo.
Mapa de bits El texto de mapa de bits no utiliza variaciones de color para que sus bordes
dentados se muestren más suaves, a diferencia del texto suavizado (consulte la definición
siguiente).
Suavizado Se utiliza para afinar el texto de modo que los bordes de los caracteres no
aparezcan excesivamente dentados en la pantalla. La opción de suavizado en Flash permite
obtener un texto más legible alineando los contornos del texto a los límites de los píxeles y
resulta especialmente efectivo para representar con mayor claridad los tamaños de fuente más
pequeños.
Caracteres Son letras, numerales y puntuación que se combinan para formar cadenas.
407
Fuentes de dispositivo Son fuentes especiales en Flash que no están incorporadas en un
archivo SWF. En lugar de ello, Flash Player utiliza la fuente disponible en el equipo local más
parecida a la fuente de dispositivo. Dado que los contornos de fuente no están incorporados,
el tamaño del archivo SWF es menor que cuando se utilizan contornos de fuente
incorporados. No obstante, como las fuentes de dispositivo no están incorporadas, el aspecto
del texto que se cree puede ser diferente al esperado en los sistemas que no tengan instalada
una fuente que corresponda a la fuente de dispositivo. Flash incluye tres fuentes de
dispositivo: _sans (similar a la Helvetica y Arial), _serif (similar a la Times Roman) y
_typewriter (similar a la Courier).
Fuentes Conjuntos de caracteres con un tipo de fuente, un estilo y un tamaño similar.
Cadena Secuencia de caracteres.
Texto Serie de una o más cadenas que se puede mostrar en un campo de texto o dentro de
un componente de la interfaz de usuario.
Campos de texto Elemento visual del escenario que permite mostrar texto al usuario.
De forma similar a lo que ocurre con los campos de introducción de texto o los controles
de formulario de área de texto en HTML, Flash permite definir los campos de texto como
editables (sólo lectura), aplicar formato HTML, activar la compatibilidad con varias líneas,
crear máscaras de contraseñas o aplicar una hoja de estilos CSS (hoja de estilos en cascada,
Cascading Style Sheet) al texto con formato HTML.
Formato de texto Se puede aplicar formato a un campo de texto o a ciertos caracteres
dentro de un campo de texto. A continuación se muestran algunos ejemplos de opciones de
formato de texto que se pueden aplicar: alineación, sangrado, negrita, color, tamaño de fuente,
anchura de márgenes, cursiva y espaciado entre caracteres.
Para más información sobre el texto, consulte los siguientes temas:
Campos de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Utilización de la clase TextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Carga de texto y variables en los campos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Utilización de fuentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Representación de fuentes y texto suavizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Diseño y formato de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Aplicación de formato al texto con hojas de estilos en cascada . . . . . . . . . . . . . . . 451
Creación de un objeto de hoja de estilos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453
Utilización de texto en formato HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .465
Ejemplo: Creación de texto desplazable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479
Todos los campos de texto son compatibles con Unicode. Para obtener información
N OT A
Este código crea un nuevo campo de texto con el nombre de instancia headline_txt. El
campo de texto se crea en la siguiente profundidad superior disponible, en las coordenadas x e
y 100, 100, con una anchura de 200 píxeles y una altura de 20 píxeles. Al probar el archivo
SWF (Control > Probar película), aparece el texto “New articles available on Developer
Center” en el escenario.
Cuando utiliza texto con formato HTML con un campo de texto (no con componentes)
A T E NC I Ó N
Sin embargo, no puede utilizar el nombre de variable myTextVar para establecer la propiedad
text del campo de texto. Deberá utilizar el nombre de instancia como se muestra en el
siguiente código:
// Esto no funcionará.
myTextVar.text = "A text field variable is not an object reference";
Este código crea un campo de texto de 300 x 100 píxeles denominado test_txt en la
ubicación (0, 0) con una profundidad (orden z) de 10.
3. Para acceder a los métodos y propiedades del campo de texto que acaba de crear, utilice el
nombre de instancia especificado en el primer parámetro del método createTextField().
Por ejemplo, el código siguiente crea un campo de texto denominado test_txt y, a
continuación, modifica sus propiedades para que sea un campo de texto multilínea con
ajuste de texto que se expanda para adaptarse al texto insertado. Posteriormente, asigna
texto mediante la propiedad text del campo de texto:
test_txt.multiline = true;
test_txt.wordWrap = true;
test_txt.autoSize = "left";
test_txt.text = "Create new text fields with the
MovieClip.createTextField() method.";
crean campos de texto durante la ejecución. Sólo se puede girar un campo de texto si
éste utiliza fuentes incorporadas. Consulte “Para incorporar un símbolo de fuente:” en
la página 427.
Puede encontrar archivos de origen de ejemplo que muestran cómo utilizar los campos de
texto mediante ActionScript. Los archivos de origen se denominan textfieldsA.fla y
textfieldsB.fla y se encuentran en la carpeta Samples del disco duro:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\TextFields.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/TextFields.
Para ver la lista completa de propiedades de la clase TextField, consulte Referencia del lenguaje
ActionScript 2.0.
Para ver ejemplos de cómo manipular campos de texto, consulte las siguientes secciones:
■ “Cambio de la posición de un campo de texto” en la página 416
■ “Cambio de las dimensiones de un campo de texto durante la ejecución” en la página 417
3. Guarde el documento de Flash y seleccione Control > Probar película para ver el campo de
texto centrado en el escenario.
Puede encontrar archivos de origen de ejemplo que muestran cómo utilizar los campos de
texto mediante ActionScript. Los archivos de origen se denominan textfieldsA.fla y
textfieldsB.fla y se encuentran en la carpeta Samples del disco duro:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\TextFields.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/TextFields.
3. Guarde el documento de Flash y seleccione Control > Probar película para comprobar el
resultado en el entorno de edición.
En el ejemplo anterior, se modificó el tamaño de un campo de texto creado dinámicamente a
300 píxeles por 200 píxeles durante la ejecución, pero al cargar contenido de un sitio Web
externo sin conocer la cantidad de contenido que se va a devolver, esta técnica podría no ser
adecuada para sus necesidades. Afortunadamente, Flash incluye una propiedad
TextField.autoSize que puede utilizar para cambiar automáticamente el tamaño de un
campo de texto para que se ajuste al contenido. En el siguiente ejemplo se demuestra cómo
puede utilizar la propiedad TextField.autoSize para cambiar el tamaño del campo de texto
después de que se añada texto al campo.
la Ayuda de Flash, puede que aparezcan saltos de línea en la cadena de texto larga.
En este caso, el código no se compilará. Si se encuentra con esta situación, active
Caracteres ocultos en el menú emergente del panel Acciones y elimine los
caracteres de salto de línea en la cadena de texto larga.
3. Guarde el documento de Flash y seleccione Control > Probar película para ver el
documento de Flash en el entorno de edición.
Flash cambia el tamaño del campo de texto verticalmente, de manera que se muestre todo
el contenido sin que los límites del campo lo corten. Si establece la propiedad
my_txt.wordWrap en false, el campo de texto cambia su tamaño horizontalmente para
dar cabida al texto.
Para aplicar una altura máxima al campo de texto con tamaño automático (de forma que
la altura del campo de texto no supere los límites del escenario), utilice el siguiente código.
if (my_txt._height > 160) {
my_txt.autoSize = "none";
my_txt._height = 160;
}
Debe añadir alguna funcionalidad de desplazamiento, como una barra, para permitir que los
usuarios vean el resto del texto. Como alternativa, puede desplazar el puntero del ratón sobre
el texto; este método suele resultar adecuado mientras se prueba este código.
Para utilizar FlashVars con el fin de pasar variables del código HTML al
documento de Flash:
1. Cree un nuevo documento de Flash y guárdelo como flashvars.fla.
2. Añada el código ActionScript siguiente al fotograma 1 de la línea de tiempo:
this.createTextField("my_txt", 10, 10, 10, 100, 21);
my_txt.text = _level0.username;
Para utilizar LoadVars con el fin de llenar un campo de texto con texto externo:
1. Cree un nuevo documento de Flash y guárdelo como loadvarsText.fla.
2. Añada el código ActionScript siguiente al fotograma 1 de la línea de tiempo:
this.createTextField("my_txt", 10, 10, 10, 320, 100);
my_txt.autoSize = "left";
my_txt.border = true;
my_txt.multiline = true;
my_txt.wordWrap = true;
El primer bloque de código del fragmento anterior crea un nuevo campo de texto en el
escenario y activa varias líneas y el ajuste de texto. El segundo bloque de código define un
nuevo objeto LoadVars que se utiliza para cargar un archivo de texto (lorem.txt) de un
servidor Web remoto y mostrar su contenido en el campo my_txt creado anteriormente.
3. Guarde el documento de Flash y seleccione Control > Probar película para probar el
archivo SWF.
Tras un breve retardo, Flash muestra el contenido del archivo remoto en el campo de texto
del escenario.
Para obtener información sobre seguridad, consulte el Capítulo 17, “Aspectos básicos de la
seguridad”
3. Guarde el documento de Flash y seleccione Control > Probar película del menú principal.
Dado que está utilizando el método LoadVars.onLoad() de LoadVars.onData(), Flash
analiza las variables y crea variables dentro de la instancia de objeto LoadVars. El archivo
de texto externo contiene dos variables, monthNames y dayNames, ambas con cadenas.
Para obtener información sobre seguridad, consulte el Capítulo 17, “Aspectos básicos de la
seguridad”
Para obtener información sobre seguridad, consulte el Capítulo 17, “Aspectos básicos de la seguridad”
Incorporación de caracteres
Si trabaja con fuentes incorporadas y sabe exactamente qué caracteres precisa, puede reducir el
tamaño de archivo incorporando sólo dichos caracteres en lugar de los contornos de fuentes
no utilizadas adicionales. Para incorporar ciertos caracteres en un campo de texto y no un
conjunto completo de caracteres, utilice el cuadro de diálogo Incorporación de caracteres para
especificar los caracteres deseados.
Incorporación de fuentes
Al incorporar fuentes, Flash almacena toda la información de fuentes en el archivo SWF, de
manera que la fuente se muestre correctamente aunque no esté instalada en el equipo del
usuario. Si utiliza una fuente en el archivo FLA que no está instalada en el equipo de un
usuario y no incorpora la fuente en el archivo SWF, Flash Player selecciona automáticamente
una fuente sustituta.
Sólo tendrá que incorporar una fuente si utiliza campos dinámicos o de introducción de
N OT A
SWF, ya que Flash tendrá que almacenar toda la información de cada conjunto de
caracteres que utilice.
6. Seleccione los caracteres individuales o conjuntos de caracteres que desee incorporar y luego
haga clic en Aceptar para aplicar los cambios y regresar al documento.
7. Seleccione Control > Probar película para probar el documento de Flash en el entorno de
edición.
Si utiliza fuentes incorporadas con distintos estilos en los campos de texto, debe
N OT A
incorporar el estilo que desee emplear. Por ejemplo, si utiliza una fuente incorporada
denominada Times y desea que una palabra aparezca en cursiva, debe asegurarse
de incorporar tanto los contornos de carácter normal como en cursiva. De lo
contrario, el texto no aparecerá en el campo.
Observe que el nodo glyphRange incluye name, Mayúsculas [A..Z] e id. Un nodo
glyphRange puede incluir tantos nodos secundarios de rango como sea necesario. Un rango
puede ser un único carácter, como 0x0020 (el carácter de espacio), que aparece en el
fragmento anterior, o un rango de caracteres, como el segundo nodo secundario. Para
incorporar sólo un carácter, defina los valores min y max en el mismo valor de carácter
Unicode.
Otro ejemplo de nodo glyphRange XML es el nodo Numerales [0..9]:
<glyphRange name="Numerales [0..9] " id="3" >
<range min="0x0030" max ="0x0039" />
<range min="0x002E" max ="0x002E" />
</glyphRange>
Este rango de caracteres incluye los valores Unicode 0x0030 (cero) a 0x0039 (9), así como
0x002E (.).
Antes de crear un conjunto de caracteres predeterminado, debe conocer los caracteres y sus
correspondientes valores Unicode. El mejor sitio para buscar valores Unicode es el sitio Web
de estándares Unicode, www.unicode.org, que contiene una tabla de códigos de caracteres
Unicode para docenas de idiomas.
carpeta de instalación de Flash. Antes de ello, haga una copia de seguridad por si
necesitara recuperar la tabla Unicode original.
con Flash y, en su lugar, crear conjuntos personalizados que incluyan la puntuación y los
caracteres necesarios.
2. Desplácese al final del documento XML y añada el siguiente código XML directamente
antes del nodo de cierre </fontEmbeddingTable>:
<glyphRange name="Mayúsculas y numerales [A..Z,0..9] " id="100" >
<range min="0x0020" max ="0x0020" />
<range min="0x002E" max ="0x002E" />
<range min="0x0030" max ="0x0039" />
<range min="0x0041" max ="0x005A" />
</glyphRange>
3. Guarde los cambios en UnicodeTable.xml.
Si tiene Flash abierto, reinicie la aplicación antes de utilizar el nuevo conjunto de
caracteres.
4. Abra o reinicie Flash y cree un documento de Flash nuevo.
5. Añada una nueva instancia de TextField en el escenario con la herramienta Texto.
6. Defina el tipo de texto de TextField como Texto dinámico en el inspector de propiedades
y haga clic en Incorporar para abrir el cuadro de diálogo Incorporación de caracteres.
7. Desplácese hasta el final del cuadro de diálogo Incorporación de caracteres y seleccione el
nuevo conjunto de caracteres, Mayúsculas y numerales [A..Z,0..9] (38 glifos).
8. Elija otros conjuntos de caracteres deseados y haga clic en Aceptar.
Si selecciona el conjunto de caracteres personalizado, Mayúsculas y numerales [A..Z,0..9], así
como los predeterminados Mayúsculas [A..Z] o Numerales [0..9], observe que el número de
glifos incorporados no cambia. Esto se debe a que los caracteres en mayúscula se incluyen en el
conjunto personalizado y Flash no incluye caracteres duplicados, lo que mantiene el tamaño de
archivo lo más reducido posible. Si selecciona el conjunto de caracteres Puntuación, que
incluye 52 glifos, junto con el conjunto de caracteres personalizado, que incluye 38, Flash
almacena información sólo de 88 glifos en lugar de 90. Esto ocurre porque dos caracteres que se
solapan, el espacio y el punto, ya están incluidos en el conjunto personalizado.
La posición del conjunto de caracteres en el cuadro de diálogo Incorporación de
S UG E R E N CI A
// 3
var mouseListener:Object = new Object();
mouseListener.onMouseMove = function():Void {
// Los valores de TextField.thickness pueden ir de -200 a +200.
lorem_txt.thickness = Math.round(_xmouse * (400 / Stage.width) - 200);
thickness_txt.text = "TextField.thickness = " + lorem_txt.thickness;
};
Mouse.addListener(mouseListener);
El primer bloque de código crea dos campos de texto, thickness_txt y lorem_txt y los
sitúa en el escenario. El campo de texto lorem_txt define su propiedad embedFonts en el
valor true y rellena el campo de texto con un bloque de texto.
El segundo bloque de código define un formato de texto con el tipo de letra Times New
Roman, establece el tamaño de fuente en 30 píxeles y aplica el formato de texto al campo
de texto lorem_txt.
El tercer y último bloque de código define y asigna un detector de ratón para el evento
onMouseMove. Cuando el puntero del ratón se mueve horizontalmente por el escenario, la
propiedad TextField.thickness cambia entre -200 y +200 en función del valor actual
de _xmouse.
6. Guarde los cambios en el archivo FLA.
7. Seleccione Control > Probar película para probar el documento de Flash.
Cuando se mueve el puntero del ratón a la mitad izquierda del escenario, el grosor de la
fuente disminuye. Cuando se mueve el puntero del ratón a la mitad derecha del escenario,
el grosor de la fuente aumenta.
Fuentes compartidas
Para utilizar una fuente como un elemento de biblioteca compartida, puede crear un símbolo
de fuente en el panel Biblioteca y luego asignar los siguientes atributos al símbolo de fuente:
■ Una cadena identificadora
■ Una URL en la que se encuentra el documento que contiene el símbolo de fuente
De esta forma, puede vincular la fuente y utilizarla en una aplicación de Flash sin que la fuente
esté almacenada dentro del archivo FLA.
Suavizado para legibilidad, sino que es preciso seleccionar individualmente los campos
de texto y cambiar manualmente la definición del suavizado para aprovechar la
tecnología de representación de FlashType.
mejorar el aspecto del texto mientras éste se está moviendo. Una vez finalizada la
animación, vuelve a activarse el suavizado.
Un archivo de ejemplo que se encuentra en el disco duro muestra cómo aplicar y manipular el
texto suavizado en una aplicación. Se utiliza la tecnología de representación de FlashType para
crear texto pequeño que aún resulta muy legible. En el archivo de ejemplo también se muestra
cómo los campos de texto pueden desplazarse rápida y gradualmente cuando se utiliza la
propiedad cacheAsBitmap.
Puede encontrar el archivo de origen de muestra, flashtype.fla, en la carpeta Samples del disco
duro.
En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\FlashType.
En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/FlashType.
puntos.
Para utilizar ActionScript para establecer el texto suavizado, consulte el siguiente ejemplo.
normal_mc.onRelease = function() {
my_txt.antiAliasType = "normal";
};
advanced_mc.onRelease = function() {
my_txt.antiAliasType = "advanced";
};
El código anterior se divide en cuatro áreas principales. El primer bloque de código crea
un nuevo objeto TextFormat, que especifica la fuente y el tamaño de fuente que se
emplearán para un campo de texto que se va a crear. La fuente especificada, Arial-10, es el
identificador de vinculación del símbolo de fuente incorporado en el paso anterior.
El segundo bloque de código crea un nuevo campo de texto con el nombre de instancia
my_txt. Para que la fuente se pueda incorporar correctamente, debe establecer
embedFonts en true para la instancia del campo de texto. El código también establece el
formato del texto del nuevo campo en el objeto TextFormat creado anteriormente.
El tercer bloque de código define una instancia LoadVars que rellena el campo de texto en
el escenario con el contenido de un archivo de texto externo. Una vez se ha cargado
completamente el documento (pero no se ha analizado), todo su contenido se copia en la
propiedad my_txt.text para que se muestre en el escenario.
El cuarto y último bloque de código define controladores de eventos onRelease para los
clips de película normal_mc y advanced_mc. Cuando el usuario hace clic y libera
cualquiera de estas opciones, cambia el tipo de suavizado del campo de texto en el
escenario.
7. Guarde los cambios en el archivo FLA.
8. Seleccione Control > Probar película para probar el documento de Flash.
9. Haga clic en el clip de película advanced_mc en el escenario.
con una calidad muy elevada. Ofrece mejores resultados con aplicaciones que
tienen gran cantidad de texto pequeño. Macromedia no recomienda utilizar el
suavizado avanzado con fuentes mayores de 48 puntos.
Para más información sobre la aplicación de formato suavizado al texto, consulte “Utilización
de un tipo de ajuste de cuadrícula” en la página 446 y “Aplicación de formato suavizado al
texto” en la página 444.
Un archivo de ejemplo que se encuentra en el disco duro muestra cómo aplicar y manipular el
texto suavizado en una aplicación. Se utiliza la tecnología de representación de FlashType para
crear texto pequeño que aún resulta muy legible. En el archivo de ejemplo también se muestra
cómo los campos de texto pueden desplazarse rápida y gradualmente cuando se utiliza la
propiedad cacheAsBitmap.
Puede encontrar el archivo de origen de muestra, flashtype.fla, en la carpeta Samples del disco
duro.
En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\FlashType.
En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/FlashType.
El corte externo siempre debe tener un valor menor o igual que el corte interno.
NO TA
Flash Player incluye valores de suavizado avanzado para diez fuentes básicas y, de ellas,
solamente para los tamaños de fuente entre 6 y 20. Para estas últimas, se utiliza el valor 6 para
todos los tamaños por debajo de 6, y 20 para todos los tamaños por encima de 20. Las demás
fuentes se asignan a los datos de fuentes suministrados. El método
setAdvancedAntialiasingTable() permite definir datos de suavizado personalizados para
otras fuentes y tamaños de fuente, o bien sustituir los valores predeterminados de las fuentes
proporcionadas. Para más información sobre la creación de una tabla de suavizado, consulte el
siguiente ejemplo:
Para crear una tabla de suavizado avanzado para una fuente incorporada:
1. Cree un nuevo documento de Flash y guárdelo como advancedaatable.fla.
2. Seleccione Nueva fuente en el menú emergente Biblioteca.
3. Seleccione Arial en el menú emergente Fuente y establezca el tamaño de la fuente en
32 puntos.
4. Seleccione las opciones de negrita y cursiva.
5. Escriba el nombre de fuente Arial (embedded) en el cuadro de texto Nombre y haga clic
en Aceptar.
6. Haga clic con el botón derecho del ratón (Windows) o con la tecla Control presionada
(Macintosh) en el símbolo de fuente de la biblioteca y seleccione Vinculación.
rotación de 0 grados.
Para obtener una lista completa de métodos TextFormat y sus correspondientes descripciones,
consulte TextFormat en Referencia del lenguaje ActionScript 2.0.
Puede crear estilos que redefinan etiquetas de formato HTML integradas que Flash Player
emplea (como <p> y<li>). También puede crear clases de estilos para aplicarlas a elementos
HTML específicos mediante el atributo class de las etiquetas <p> o <span> o definir nuevas
etiquetas.
Utilice la clase TextField.StyleSheet para trabajar con hojas de estilos de texto. Aunque la clase
TextField puede utilizarse con Flash Player 6, la clase TextField.StyleSheet requiere que los
archivos SWF se utilicen en Flash Player 7 o posteriores. Puede cargar estilos desde un archivo
CSS externo o crearlos de forma nativa con ActionScript. Para aplicar una hoja de estilos a un
campo de texto que contenga texto con formato HTML o XML, utilice la propiedad
TextField.styleSheet. Los estilos definidos en la hoja de estilos se asignan
automáticamente a las etiquetas definidas en el documento HTML o XML.
La utilización de hojas de estilos conlleva los siguientes tres pasos básicos:
■ Crear un objeto de hoja de estilos desde la clase TextField.StyleSheet (para más
información, consulte StyleSheet (TextField.StyleSheet) en Referencia del lenguaje
ActionScript 2.0).
■ Añadir estilos al objeto de hoja de estilos, ya sea cargándolos desde un archivo CSS externo
o bien creando nuevos estilos con ActionScript.
■ Asignar la hoja de estilos a un objeto TextField que contenga texto con formato HTML o
XML.
Para más información, consulte los siguientes temas:
■ “Propiedades CSS admitidas” en la página 452
■ “Creación de un objeto de hoja de estilos” en la página 453
■ “Carga de archivos CSS externos” en la página 454
■ “Creación de estilos con ActionScript” en la página 456
■ “Aplicación de estilos a un objeto TextField” en la página 456
Para añadir estilos a un objeto de hoja de estilos, puede cargar un archivo CSS externo en el
objeto o definir los estilos en ActionScript. Consulte “Carga de archivos CSS externos” en
la página 454 y “Creación de estilos con ActionScript” en la página 456.
.headline {
font-family: Arial,Helvetica,sans-serif;
font-size: 24px;
}
Si aparece “Error loading CSS file.” en el panel Salida, asegúrese de que el archivo FLA y el
archivo CSS se encuentren en el mismo directorio y de que ha escrito correctamente el
nombre del archivo CSS.
Al igual que ocurre con los demás métodos de ActionScript que cargan datos a través de la red,
el archivo CSS debe residir en el mismo dominio que el archivo SWF que está cargando el
archivo. (Consulte “Acceso a varios dominios y subdominios entre archivos SWF” en
la página 736.) Para más información sobre la utilización de CSS con Flash, consulte
StyleSheet (TextField.StyleSheet) en Referencia del lenguaje ActionScript 2.0.
Puede encontrar un archivo de origen de ejemplo, formattedText.fla, en la carpeta Samples del
disco duro, en el que se muestra cómo aplicar formato CSS al texto que se carga en un archivo
SWF durante la ejecución.
En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\LoadText.
En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/LoadText.
Cuando asigna un objeto de hoja de estilos a un objeto TextField, se producen los cambios
siguientes en el comportamiento habitual del campo de texto:
■ Las propiedades text y htmlText del campo de texto, así como las variables asociadas al
campo de texto, siempre contienen el mismo valor y se comportan de forma idéntica.
■ El campo de texto pasa a ser de sólo lectura y el usuario no puede editarlo.
■ Los métodos setTextFormat() y replaceSel() de la clase TextField ya no funcionan
con el campo de texto. La única manera de cambiar el campo es modificando las
propiedades text o htmlText del campo de texto o cambiando la variable asociada al
mismo.
■ Todo el texto asignado a la propiedad text o a la propiedad htmlText del campo de texto
o toda variable asociada se almacena literalmente; todo lo escrito en estas propiedades
puede recuperarse en el formato de texto original.
Para la palabra emphatic del texto anterior, el estilo emphasized está anidado dentro del estilo
mainBody. El estilo mainBody aporta las reglas de color, tamaño de fuente y decoración. El
estilo emphasized añade una regla de grosor de fuente a dichas reglas. Se aplicará el formato a
la palabra enfatizada mediante una combinación de las reglas especificadas por mainBody y
emphasized.
En el texto HTML que asigna a un campo de texto, puede aplicar estos estilos a etiquetas <p>
y <span>, como se muestra en el siguiente fragmento:
<p class='mainBody'>This is <span class='emphasis'>really exciting!</
span></p>
En la tabla siguiente se muestra a qué etiquetas HTML incorporadas se puede aplicar un estilo
y cómo se aplica cada estilo:
a:link {
color: #FF0000;
}
a:hover{
text-decoration: underline;
}
.headline {
color: #000000;
font-family: Arial,Helvetica,sans-serif;
font-size: 18px;
font-weight: bold;
display: block;
}
.byline {
color: #666600;
font-style: italic;
font-weight: bold;
display: inline;
}
Esta hoja de estilos define los estilos para dos etiquetas HTML incorporadas (<p> y <a>)
que se aplicarán a todas las instancias de dichas etiquetas. También define dos clases de
estilos (.headline y .byline) que se aplicarán a párrafos y espacios de texto específicos.
3. Guarde el archivo como html_styles.css.
4. Cree un nuevo archivo de texto en un editor de texto o HTML y guarde el documento
como myText.htm.
Si copia y pega esta cadena de texto, asegúrese de que quita los saltos de línea que
NO T A
información sobre cómo cargar datos externos, consulte el Capítulo 15, “Utilización
de imágenes, sonido y vídeo”.
8. Guarde el archivo como news_html.fla en el mismo directorio que contiene el archivo CSS
creado en el paso 3.
9. Seleccione Control > Probar película para ver los estilos aplicados al texto
HTML automáticamente.
A continuación, puede rellenar un campo de texto asociado con dicha hoja de estilos con el
siguiente texto en formato XML:
<sectionHeading>This is a section</sectionHeading>
<mainBody>This is some main body text,
with one <emphasized>emphatic</emphasized> word.
</mainBody>
Si copia y pega esta cadena de texto, asegúrese de que quita los saltos de línea que
NO T A
más información sobre cómo cargar datos externos, consulte el Capítulo 15,
“Utilización de imágenes, sonido y vídeo”.
Para mostrar código HTML correctamente, deberá utilizar la sintaxis correcta. Los atributos
de las etiquetas HTML deben escribirse entre comillas dobles (") o simples ('). Los valores de
los atributos que no estén entre comillas pueden provocar resultados imprevisibles, como una
presentación incorrecta del texto. Por ejemplo, Flash Player no genera correctamente el
fragmento de código HTML siguiente porque el valor asignado al atributo align (left) no
está entre comillas:
this.createTextField("myField_txt", 10, 10, 10, 400, 200);
myField_txt.html = true;
myField_txt.htmlText = "<p align=left>This is left-aligned text</p>";
Si escribe los valores de los atributos entre comillas dobles, debe anular el valor de las comillas
(\"). Cualquiera de las siguientes formas de hacerlo resulta aceptable:
myField_txt.htmlText = "<p align='left'>This uses single quotes</p>";
myField_txt.htmlText = "<p align=\"left\">This uses escaped double quotes</
p>";
myField_txt.htmlText = '<p align="left">This uses outer single quotes</p>';
myField_txt.htmlText = '<p align=\'left\'>This uses escaped single quotes</
p>';
No es necesario anular el valor de las comillas dobles si carga texto de un archivo externo; sólo
es necesario si asigna una cadena de texto en ActionScript.
Etiqueta de anclaje
La etiqueta <a> crea un vínculo de hipertexto y admite los atributos siguientes:
■ href Cadena formada por un máximo de 128 caracteres que especifica la URL de la
página que debe cargarse en el navegador. La URL puede ser absoluta o relativa a la
ubicación del archivo SWF que carga la página. En ejemplo de referencia absoluta a una
URL es http://www.macromedia.com; un ejemplo de referencia relativa es /
index.html.
■ target Especifica el nombre de la ventana de destino en la que se cargará la página.
Entre las opciones figuran _self, _blank, _parent y _top. La opción _self especifica el
marco actual de la ventana actual, _blank especifica una ventana nueva, _parent
especifica el nivel superior del marco actual y _top especifica el marco del nivel más alto
de la ventana actual.
Por ejemplo, el código HTML siguiente crea el vínculo “Ir a página principal”, que abre
www.macromedia.com en una ventana de navegador nueva.
urlText_txt.htmlText = "<a href='http://www.macromedia.com'
target='_blank'>Go home</a>";
Puede utilizar el protocolo especial asfunction para hacer que el vínculo ejecute una función
de ActionScript en un archivo SWF en lugar de abrir una URL. Para más información sobre el
protocolo asfunction, consulte asfunction protocol en Referencia del lenguaje ActionScript
2.0.
También puede definir los estilos a:link, a:hover y a:active para las etiquetas de anclaje
mediante las hojas de estilos. Consulte “Estilos para etiquetas HTML incorporadas” en
la página 459.
Las URL absolutas deben llevar el prefijo http://, ya que, en caso contrario, Flash las
N OT A
Debe haber un tipo de letra en negrita disponible para la fuente utilizada para mostrar el texto.
Etiqueta de fuente
La etiqueta <font> especifica una fuente o una lista de fuentes para mostrar el texto.
La etiqueta de fuente admite los atributos siguientes:
■ color Sólo se admiten los valores de colores hexadecimales (#FFFFFF). Por ejemplo, el
código HTML siguiente crea texto de color rojo:
myText_txt.htmlText = "<font color='#FF0000'>This is red text</font>";
Para crear un campo de texto multilínea con ajuste de texto, siga uno de estos
procedimientos:
■ En el entorno de edición de Flash, seleccione un campo de texto en el escenario y, a
continuación, en el inspector de propiedades, seleccione Multilínea en el menú Tipo de texto.
■ En el caso de un campo de texto creado durante la ejecución con createTextField (método
MovieClip.createTextField), defina las propiedades multiline (propiedad
TextField.multiline) y multiline (propiedad TextField.multiline) de la instancia del campo
de texto nuevo en true.
La etiqueta <img> tiene un solo atributo necesario, src, que especifica la ruta a un archivo de
imagen, a un archivo SWF o al identificador de vinculación de un símbolo de clip de película
en la biblioteca. Todos los demás atributos son opcionales.
La etiqueta <img> admite los atributos siguientes:
■ src Especifica la URL de un archivo de imagen o SWF o el identificador de vínculo de
un símbolo de clip de película de la biblioteca. Este atributo es necesario; todos los demás
son opcionales. Los archivos externos (JPEG, GIF, PNG y SWF) no se muestran hasta que
no se han descargado completamente.
■ id Especifica el nombre de la instancia de clip de película (creada por Flash Player) que
contiene el archivo de imagen, SWF o el clip de película incorporado. Resulta de utilidad
si desea controlar el contenido incorporado con ActionScript.
■ width Anchura, en píxeles, de la imagen, el archivo SWF o el clip de película que se va a
insertar.
■ height Altura, en píxeles, de la imagen, archivo SWF o clip de película que se va a insertar.
■ align Especifica la alineación horizontal de la imagen incorporada en el campo de
texto. Los valores válidos son left y right. El valor predeterminado es left.
■ hspace Especifica la cantidad de espacio horizontal que rodea a la imagen sin que
aparezca texto alguno. El valor predeterminado es 8.
■ vspace Especifica la cantidad de espacio vertical que rodea a la imagen sin que aparezca
texto alguno. El valor predeterminado es 8.
Para más información y ejemplos sobre la utilización de la etiqueta <img>, consulte “Incorporación
de imágenes, archivos SWF y clips de película en campos de texto” en la página 474.
<ul>), por lo que no afectan al modo en que se muestran las listas. Todos los
elementos de lista llevan viñeta.
Etiqueta de párrafo
La etiqueta <p> crea un párrafo nuevo. Debe configurar el campo de texto como campo de
texto de varias líneas para poder utilizar esta etiqueta.
La etiqueta <img> admite los atributos siguientes:
■ align Especifica la alineación del texto dentro del párrafo; los valores válidos son left,
right, justify y center.
En el ejemplo siguiente se utiliza el atributo class para asignar una clase de estilo de texto
a una etiqueta <p>:
var myStyleSheet:TextField.StyleSheet = new TextField.StyleSheet();
myStyleSheet.setStyle(".blue", {color:'#99CCFF', fontSize:18});
this.createTextField("test_txt", 10, 0, 0, 300, 100);
test_txt.html = true;
test_txt.styleSheet = myStyleSheet;
test_txt.htmlText = "<p class='blue'>This is some body-styled text.</
p>.";
Etiqueta de espacio
La etiqueta <span> sólo se puede utilizar con los estilos de texto CSS. Para más información,
consulte “Aplicación de formato al texto con hojas de estilos en cascada” en la página 451.
Admite el atributo siguiente:
■ class Especifica una clase de estilos CSS definida por un objeto TextField.StyleSheet.
Para más información sobre la creación de clases de estilos de texto, consulte “Utilización
de las clases de estilos” en la página 458.
Entidad Descripción
< < (menor que)
> > (mayor que)
& & (ampersand)
" " (comillas dobles)
' ' (apóstrofe, comilla simple)
Flash también admite códigos de caracteres explícitos como ' (ampersand - ASCII) y
& (ampersand - Unicode).
También puede insertar una imagen utilizando una dirección absoluta. El código anterior
inserta un archivo JPEG ubicado en un directorio que se encuentra en un servidor. El
archivo SWF que contiene este código podría encontrarse en la unidad de disco duro o en
un servidor.
4. Guarde el documento de Flash y seleccione Control > Probar película para probar el
documento.
El campo de texto superior debería incluir una frase y probablemente un mensaje de texto
en el panel Salida en el que se indicara que Flash no pudo encontrar el archivo beach.gif en
el directorio actual. El campo de texto inferior debería incluir una frase y una imagen con
una flor cargada desde el servidor remoto.
Copie una imagen GIF en el mismo directorio que el archivo FLA, cámbiele el nombre a
beach.gif y seleccione Control > Probar película para volver a probar el documento de
Flash.
Al utilizar URL absolutas, deberá asegurarse de que la URL lleva el prefijo http://.
NO T A
Cuando se coloca el puntero del ratón sobre una imagen, un archivo SWF o un clip de
película situado entre etiquetas <a>, el puntero del ratón se convierte en un icono de “mano
que señala”, el mismo que se muestra para vínculos de hipertexto estándar. Las acciones
interactivas, como hacer clic con el ratón y presionar teclas, no se registran en los archivos
SWF y clips de película que están entre etiquetas <a>.
Para obtener información sobre la incorporación de medios, consulte “Creación de vínculos
de hipertexto a partir de medios incorporados” en la página 478.
6. Tras el código ActionScript del paso 5, introduzca el código siguiente para desplazar el texto
hacia arriba:
up_btn.onPress = function() {
textField_txt.scroll -= 1;
};
Panel Cadenas
Este panel le permite crear y mantener contenido multilingüe. Puede especificar diferente
contenido para los campos de texto que abarcan varios idiomas y que Flash determine
automáticamente el contenido que debe mostrar en función del idioma del equipo en el que
se ejecuta Flash Player.
Para obtener información general sobre el panel Cadenas y su utilización en las aplicaciones,
consulte los siguientes temas en Utilización de Flash:
■ “Creación de un texto con varios idiomas con el panel Cadenas” en la página 409
■ “Edición de texto en el panel Cadenas” en la página 413
■ “Traducción de texto en el panel Cadenas o en un archivo XML” en la página 418
manualmente utilizando idioma del escenario Se sustituyen los ID con cadenas en tiempo
de compilación y Flash Player no los puede modificar.
mediante ActionScript en tiempo de ejecución Con ActionScript se controla la
sustitución de ID de cadena durante la ejecución. Esta opción permite controlar la
sincronización y el idioma de la sustitución de ID de cadena.
Puede utilizar las propiedades y los métodos de la clase Locale cuando quiera sustituir los ID
de cadena mediante ActionScript para controlar la aplicación cuando se reproducen en Flash
Player. Para ver una demostración de cómo utilizar la clase Locale, consulte el procedimiento
siguiente.
function langListener(eventObj:Object):Void {
Locale.loadLanguageXML(eventObj.target.value);
}
function localeListener(success:Boolean):Void {
if (success) {
greeting_txt.text = Locale.loadString("IDS_GREETING");
} else {
greeting_txt.text = "unable to load language XML file.";
}
}
2.0, ya que no forma parte de Flash Player. Dado que esta clase se instala en la ruta
de clases de edición de Flash, se compila automáticamente en los archivos SWF. El
uso de la clase Locale aumenta ligeramente el tamaño del archivo SWF, ya que la
clase se debe compilar en el mismo.
En la actualidad, no se puede saber qué IME está activo (en caso de haber alguno
NO T A
El código anterior primero comprueba si el sistema actual cuenta con un IME instalado. Si
es así, Flash comprueba si está activado.
3. Seleccione Control > Probar película para probar el documento.
Aparecerá un mensaje en el panel Salida indicando si se cuenta o no con el IME y si está
activo en ese momento.
La clase IME también puede utilizarse para activar y desactivar el IME en Flash durante la
ejecución. El siguiente ejemplo requiere que se cuente con un IME instalado en el sistema.
Para más información sobre la instalación de un IME en su plataforma, consulte los siguientes
vínculos:
■ www.microsoft.com/globaldev/default.mspx
■ http://developer.apple.com/documentation/
■ http://java.sun.com
Puede activar o desactivar un IME mientras se reproduce el archivo SWF, como se muestra en
este ejemplo.
enable_btn.onRelease = function() {
System.IME.setEnabled(true);
};
disable_btn.onRelease = function() {
System.IME.setEnabled(false);
};
function checkIME():Boolean {
if (System.capabilities.hasIME) {
if (System.IME.getEnabled()) {
trace("You have an IME installed and enabled.");
return true;
} else {
trace("You have an IME installed but not enabled.");
return false;
}
} else {
trace("Please install an IME and try again.");
return false;
}
}
Este ejemplo requiere que se cuente con un IME instalado en el sistema. Para
N OT A
La clase String
Una cadena (string) es también una clase y un tipo de datos en el lenguaje ActionScript básico.
El tipo de datos String representa una secuencia de caracteres de 16 bits que puede incluir
letras, números y signos de puntuación. Las cadenas se almacenan como caracteres Unicode
empleando el formato UTF-16. Una operación sobre un valor de cadena (String) devuelve
una nueva instancia de la cadena. El valor predeterminado de una variable declarada con el
tipo de datos String es null.
Para más información sobre cadenas, datos y valores, consulte el Capítulo 10, “Datos y tipos
de datos”.
La clase String contiene métodos que le permiten trabajar con cadenas de texto. Las cadenas
son importantes al utilizar numerosos objetos; los métodos descritos en este capítulo son útiles
al trabajar con cadenas utilizadas en muchos objetos, como, por ejemplo, instancias de
TextField, XML, ContextMenu y FileReference.
La clase String es un envolvente para el tipo de datos primitivo de cadena y proporciona
métodos y propiedades que le permiten manipular valores de cadena primitivos. Puede
convertir el valor de cualquier objeto en una cadena utilizando la función String(). Todos
los métodos de la clase String, salvo concat(), fromCharCode(), slice() y substr(), son
genéricos, lo que significa que los métodos llaman a la función toString() antes de realizar
sus operaciones y puede llamar a estos métodos con otros objetos que no sean String.
Dado que todos los índices de cadenas están basados en cero, el índice del último carácter de
cualquier cadena myStr es myStr.length - 1.
Creación de cadenas
Puede llamar a cualquiera de los métodos de la clase String utilizando el método constructor
new String() o un nuevo valor de literal de cadena. Si especifica un literal de cadena, el
intérprete de ActionScript lo convierte automáticamente en un objeto String temporal, llama
al método y descarta el objeto String temporal. También puede utilizar la propiedad
String.length con un literal de cadena.
No debe confundir un literal de cadena con un objeto String. Para más información sobre
literales de cadenas y el objeto String, consulte el Capítulo 4, “Literales”, en la página 94.
En el siguiente ejemplo, la línea de código crea el literal de cadena firstStr. Para declarar un
literal de cadena, utilice delimitadores de comilla simple recta (') o de comilla doble recta (").
Este código define tres objetos String, uno que emplea un literal de cadena, otro que
emplea el operador new y otro que no tiene valor inicial. Las cadenas se pueden comparar
utilizando el operador de igualdad (==), como se muestra en la tercera línea de código.
En el caso de las variables, se especifica el tipo de datos sólo cuando se define la variable.
3. Seleccione Control > Probar película para probar el documento.
Utilice siempre literales de cadena a no ser que necesite utilizar un objeto String
específicamente. Para más información sobre literales de cadenas y el objeto String, consulte el
Capítulo 4, “Literales”, en la página 94.
Para más información sobre el uso del carácter de barra invertida en cadenas, consulte “El
carácter de escape” en la página 490.
Recuerde que los caracteres de “comilla curva” o “comilla especial” no se pueden utilizar en el
código ActionScript, a diferencia de las comillas rectas (') y ("), que sí pueden utilizarse en el
código. Al pegar texto de otra fuente en el código ActionScript, por ejemplo, de la Web o de
un documento de Word, asegúrese de que utiliza delimitadores de comillas rectas.
Puede encontrar un archivo de origen de muestra, strings.fla, en la carpeta Samples del disco
duro. En él se muestra cómo crear un procesador de textos sencillo que compara y recupera
selecciones de cadenas y subcadenas.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Strings.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Strings.
El carácter de escape
Puede utilizar el carácter de escape de barra invertida (\) para definir otros caracteres en los
literales de cadena.
Secuencia de Descripción
escape
\b El carácter de retroceso.
\f El carácter de salto de página.
\n El carácter de nueva línea.
\r El retorno de carro.
\t El carácter de tabulación.
\unnnn El carácter Unicode con el código de carácter especificado por el
número hexadecimal nnnn. Por ejemplo, \u263a es el carácter de
sonrisa.
\xnn El carácter ASCII con el código de carácter especificado por el
número hexadecimal nn.
También puede utilizar los códigos de caracteres para definir una cadena. Para más
información sobre códigos de caracteres y codificación de caracteres, consulte “Cadenas y la
clase String” en la página 480.
Puede examinar los caracteres situados en diversas posiciones de una cadena, como en este
ejemplo.
3. Seleccione Control > Probar película para previsualizar el documento de Flash. Debería ver
cada carácter trazado en el panel Salida en una línea independiente.
4. Modifique el código ActionScript existente de forma que trace el valor ASCII de cada
carácter:
var myStr:String = "hello world!";
for (var i:Number = 0; i < myStr.length; i++) {
trace(myStr.charAt(i) + " - ASCII=" + myStr.charCodeAt(i));
}
También puede dividir una cadena en una matriz de caracteres con el método
S UG E R E N CI A
String.split() e introduciendo una cadena vacía ("") como delimitador; por ejemplo,
var charArray:Array = myStr.split("");
Puede utilizar operadores para comparar cadenas. Para obtener información sobre la
utilización de operadores con cadenas, consulte “Utilización de operadores con cadenas” en
la página 150.
Puede utilizar estos operadores con sentencias condicionales, como if y while. En el
siguiente ejemplo se utilizan operadores y cadenas para realizar una comparación.
3. Guarde el documento de Flash y seleccione Control > Probar película para probar el
archivo SWF.
Cuando compara dos tipos de datos distintos (como cadenas y números), Flash intenta
convertirlos de forma que se pueda realizar la comparación.
Utilice los operadores de igualdad estricta (===) y desigualdad estricta (!==) para comprobar
que los objetos comparados son del mismo tipo. En el siguiente ejemplo se utilizan operadores
de comparación estrictos para garantizar que Flash no intenta convertir los tipos de datos
mientras trata de comparar los valores.
Al utilizar el operador de suma (+) con una combinación de instancias de String y distintas de
String, no es necesario utilizar el método toString(). Para obtener detalles sobre
concatenación, consulte el segundo procedimiento en esta sección.
El método toLowerCase() y el método toUpperCase() convierten los caracteres alfabéticos
de la cadena a minúsculas y mayúsculas respectivamente. En el siguiente ejemplo se muestra
cómo convertir una cadena de minúsculas a mayúsculas.
Tras ejecutar estos métodos, la cadena original permanece intacta. Para transformar
N OT A
myStr = myStr.toUpperCase();
Al concatenar cadenas, se toman dos cadenas y se unen secuencialmente para formar una
sola cadena. Por ejemplo, puede utilizar el operador de suma (+) para concatenar dos
cadenas. En el siguiente ejemplo se muestra cómo concatenar dos cadenas.
Puede utilizar el método split() para crear una matriz de subcadenas de una cadena que se
divide en función de un carácter delimitador. Por ejemplo, podría segmentar en varias cadenas
una cadena delimitada por comas o tabulaciones.
Por ejemplo, el siguiente código muestra cómo puede dividirse una matriz en subcadenas
empleando el carácter ampersand (&) como delimitador.
La forma más sencilla de analizar una cadena de consulta (una cadena delimitada
S UG E R E N CI A
Devolución de subcadenas
Los métodos substr() y substring() de la clase String son similares. Ambos devuelven una
subcadena de una cadena y ambos toman dos parámetros. En ambos métodos, el primer
parámetro es la posición del carácter inicial de la cadena en cuestión. No obstante, en el
método substr(), el segundo parámetro es la longitud de la subcadena que debe devolverse,
mientras que en el método substring(), el segundo parámetro es la posición del carácter
final de la subcadena (que no se incluye en la cadena devuelta). Este ejemplo muestra la
diferencia entre estos dos métodos:
slice().
El método lastIndexOf() localiza la última vez que aparece una subcadena en la cadena.
Por ejemplo, en lugar de buscar un carácter o una subcadena desde el principio de una
cadena, lastIndexOf() inicia la búsqueda desde el final de una cadena hacia atrás. De la
misma forma que ocurre con el método indexOf(), si incluye un segundo parámetro con
el método lastIndexOf(), la búsqueda se realiza desde dicha posición de índice aunque
hacia atrás (de derecha a izquierda):
Puede encontrar un archivo de origen de muestra, strings.fla, en la carpeta Samples del disco
duro. En él se muestra cómo crear un procesador de textos sencillo que compara y recupera
selecciones de cadenas y subcadenas.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Strings.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Strings.
En este capítulo se describe cómo añadir animación a las aplicaciones de Macromedia Flash
Basic 8 y Macromedia Flash Professional 8 mediante código ActionScript en lugar de (o
además de) animaciones basadas en la línea de tiempo que utilizan interpolaciones de
movimiento y de forma. El uso de código para crear animaciones y efectos a menudo reduce el
tamaño de archivo de la aplicación terminada y también puede mejorar el rendimiento y la
coherencia de la propia animación. En ocasiones, las animaciones basadas en ActionScript
incluso pueden llegar a reducir el volumen de trabajo: el código se escribe con mayor rapidez y
resulta más sencillo de aplicarse a muchas instancias al mismo tiempo o de reutilizarse en otras
aplicaciones. En este capítulo también se muestra cómo crear animaciones utilizando
conceptos básicos fundamentales de ActionScript, las clases Tween y TransitionManager, la
interfaz API de dibujo, las clases de filtro y los modos de mezcla.
Puede utilizar la interfaz API de dibujo, que consta de los métodos de dibujo de la clase
MovieClip, para añadir animaciones y dibujos. Estos métodos permiten emplear código para
crear líneas, rellenos y formas, en lugar de herramientas de dibujo en la herramienta de edición.
Los filtros y otros efectos expresivos también son importantes en muchas aplicaciones de
Flash, ya que permiten aplicar rápidamente efectos y animarlos. Puede utilizar código para
añadir y animar efectos de filtro, modos de mezcla e imágenes de mapa de bits.
Este capítulo contiene las siguientes secciones, que describen el uso de código ActionScript
para crear animaciones y añadir efectos, así como la utilización de la interfaz API de dibujo
para dibujar en ActionScript:
Creación de scripts para animaciones con ActionScript 2.0 . . . . . . . . . . . . . . . . . 502
Caché de mapa de bits, desplazamiento y rendimiento. . . . . . . . . . . . . . . . . . . . . . . 513
Las clases Tween y TransitionManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Utilización de efectos de filtro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .532
Utilización de filtros con código ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Manipulación de efectos de filtro mediante código . . . . . . . . . . . . . . . . . . . . . . . . . .564
Creación de mapas de bits con la clase BitmapData . . . . . . . . . . . . . . . . . . . . . . . . .568
Modos de mezcla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
501
Orden de operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .574
Dibujo con código ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .574
Aspectos básicos de la escala y las guías de división . . . . . . . . . . . . . . . . . . . . . . . .589
3. Seleccione Control > Probar película para probar el documento y después mueva el puntero
del ratón por el escenario.
El archivo de imagen que se carga transforma los colores a medida que se mueve el ratón.
También puede utilizar la clase ColorMatrixFilter para convertir una imagen en color a blanco
y negro, como muestra el siguiente procedimiento:
Este bloque de código emplea la clase MovieClipLoader para cargar un archivo JPEG
externo. Cuando la imagen se ha cargado correctamente, se llama al controlador de
eventos onLoadInit de la clase MovieClipLoader y se modifica el brillo de la imagen a
100 mediante el filtro ColorMatrixFilter.
3. Seleccione Control > Probar película para probar el documento.
La imagen cargada en el archivo SWF cambia su brillo al probar el archivo SWF.
Compruebe la imagen en línea (http://www.helpexamples.com/flash/images/
image2.jpg) para ver su apariencia original.
Para ver un ejemplo de una animación creada mediante script en Flash, puede encontrar un
archivo de origen de muestra, animation.fla, en la carpeta Samples del disco duro:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Animation.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Animation.
También puede encontrar aplicaciones de galerías de fotos de muestra en el disco duro. Estos
archivos proporcionan ejemplos de cómo emplear ActionScript para controlar los clips de
película dinámicamente mientras se cargan archivos de imagen en un archivo SWF, que
incluye la animación creada mediante script. Los archivos de origen de ejemplo se denominan
gallery_tree.fla y gallery_tween.fla y se encuentran en la carpeta Samples del disco duro.
rotados, pero ajustados a los límites del píxel más cercano. Los píxeles se asignan de 1 a
1 con el objeto principal. Si los límites del mapa de bits cambian, el mapa de bits se
vuelve a crear en lugar de expandirse.
Las clases Tween y TransitionManager están disponibles sólo en ActionScript 2.0, pero
N OT A
Para obtener información sobre cada método y propiedad de la clase Tween, consulte el
Capítulo 51, “Clase Tween” en Referencia del lenguaje de componentes. Para obtener
información sobre cada método y propiedad de la clase TransitionManager, consulte el
Capítulo 48, “Clase TransitionManager” en Referencia del lenguaje de componentes. Para
obtener información sobre cómo trabajar con paquetes, consulte “Utilización de paquetes de
filtros” en la página 534.
Puede encontrar un archivo de origen de ejemplo que utiliza estas clases para añadir
animación mediante scripts. Se denomina tweenProgress.fla y se encuentra en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Tween ProgressBar.
Las clases Tween y TransitionManager están diseñadas para permitirle añadir animaciones en
partes del archivo SWF empleando código ActionScript sencillo. El entorno de edición de
Flash contiene comportamientos que le permiten utilizar estas clases predefinidas para
transiciones en aplicaciones basadas en pantallas. Para crear una presentación de diapositivas o
una aplicación de formulario, puede seleccionar comportamientos que añadan distintos tipos
de transiciones entre diapositivas.
Antes de comenzar a utilizar estas transiciones con clips de película en Flash, deberá
comprobar lo que hacen cuando se utilizan en una aplicación basada en pantallas.
Para ver el código ActionScript que crea una transición en una presentación
de diapositivas:
1. Seleccione Archivo > Nuevo para crear una nueva presentación de diapositivas en Flash
Professional 8.
2. Seleccione Presentación de Flash de la ficha General y haga clic en Aceptar.
3. Seleccione Ventana > Comportamientos para abrir el panel Comportamientos.
4. Haga clic en Añadir comportamiento (+).
5. Seleccione Pantalla > Transición del menú emergente para abrir el cuadro de diálogo
Transiciones.
Este código llama a la clase TransitionManager y luego aplica la transición Zoom con el
método de suavizado mx.transitions.easing.Bounce.easeOut especificado. En este
caso, la transición se aplica a la diapositiva seleccionada. Para aplicar este efecto a un clip
de película, puede modificar el código ActionScript que debe utilizarse en las animaciones
de Flash. La modificación del código para que funcione con un símbolo de clip de película
es sencilla: cambie el primer parámetro de eventObj.target al nombre de instancia de
clip de película deseado.
Flash se suministra con diez transiciones que puede personalizar utilizando los métodos de
suavizado y diversos parámetros opcionales. Recuerde que el suavizado es la aceleración o
desaceleración gradual durante una animación, que hace que las animaciones parezcan más
realistas. Por ejemplo, una bola puede aumentar gradualmente su velocidad hacia el comienzo
de una animación e ir reduciendo la velocidad antes de detenerse por completo al finalizar la
animación. Existen numerosas ecuaciones para esta aceleración y desaceleración que cambian
el suavizado de la animación.
En la tabla siguiente se describen las transiciones incluidas en Flash Basic 8 (mediante código)
y Flash Professional 8 (mediante código o comportamientos):
Transición Descripción
Iris Muestra la pantalla o el clip de película mediante una máscara animada
que se acerca.
Cada transición cuenta con personalizaciones ligeramente distintas que puede aplicar a la
animación. El cuadro de diálogo Transiciones ofrece una vista previa de muestra de la
animación antes de aplicar el efecto a la diapositiva o el formulario.
Para previsualizar el funcionamiento de cada transición con los distintos métodos en las
S U G E R E N CI A
Para obtener información sobre cómo trabajar con paquetes, consulte “Utilización
N OT A
Para obtener información sobre cada método y propiedad de la clase Tween, consulte el
Capítulo 51, “Clase Tween” en Referencia del lenguaje de componentes. Para obtener
información sobre cada método y propiedad de la clase TransitionManager, consulte el
Capítulo 48, “Clase TransitionManager” en Referencia del lenguaje de componentes.
Puede encontrar un archivo de origen de ejemplo que utiliza estas clases para añadir
animación mediante scripts. Se denomina tweenProgress.fla y se encuentra en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Tween ProgressBar.
Transición Descripción
Back Amplía la animación más allá del rango de la transición en uno o ambos
extremos una vez para asemejar un efecto de desbordamiento.
Elastic Añade un efecto elástico que está fuera del rango de la transición en
uno o ambos extremos. La duración no afecta al grado de elasticidad.
Estas seis clases de suavizado (aceleración) tienen tres métodos de suavizado que se describen
en la siguiente tabla:
Método Descripción
easeIn Proporciona el efecto de suavizado al principio de la transición.
easeOut Proporciona el efecto de suavizado al final de la transición.
easeInOut Proporciona el efecto de suavizado al principio y al final de la
transición.
Para abrir estas clases en Flash o en el editor de ActionScript, desplácese a la carpeta Disco
duro\Archivos de programa\Macromedia\Flash 8\idioma\First
Run\Classes\mx\transitions\easing\ en Windows (se presupone una instalación
predeterminada) o Disco duro de Macintosh:Applications:Macromedia Flash 8:First
Run:Classes:mx:transitions:easing.
En el procedimiento de aplicar zoom a las imágenes descrito en “Animación con las clases
TransitionManager y Tween” en la página 518 se utilizaban el método y la clase de suavizado
mx.transitions.easing.Bounce.easeOut. En la carpeta de su disco duro, el código ActionScript
hace referencia al método easeOut() dentro de la clase Bounce.as. Este archivo de
ActionScript se encuentra en la carpeta easing.
Para obtener información sobre cada método y propiedad de la clase Tween, consulte el
Capítulo 51, “Clase Tween” en Referencia del lenguaje de componentes. Para obtener
información sobre cada método y propiedad de la clase TransitionManager, consulte el
Capítulo 48, “Clase TransitionManager” en Referencia del lenguaje de componentes.
Para previsualizar el funcionamiento de cada transición con los distintos métodos en las
S U G E R E N CI A
La clase Tween
La clase Tween le permite mover, cambiar el tamaño y desvanecer clip de película fácilmente
en el escenario. El constructor de la clase mx.transitions.Tween tiene el siguiente nombre y
tipos de parámetro:
function Tween(obj, prop, func, begin, finish, duration, useSeconds) {
// código ...
}
Este fragmento de código ActionScript crea una nueva instancia de la clase Tween que aplica
animación al clip de película ball_mc en el escenario a lo largo del eje x (de izquierda a
derecha). El clip de película se desplaza desde los 0 píxeles hasta los 300 píxeles en tres
segundos y el código ActionScript aplica un método de suavizado elástico. Esto significa que la
pelota llega más allá de los 300 píxeles del eje x antes de regresar empleando un efecto de
movimiento fluido.
Puede encontrar un archivo de origen de ejemplo que utiliza estas clases para añadir
animación mediante scripts. Se denomina tweenProgress.fla y se encuentra en la carpeta
Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Tween ProgressBar.
Este código de ejemplo utiliza dos sentencias import. La primera sentencia importa sólo la
clase mx.transitions.Tween, mientras que la segunda sentencia import utiliza el comodín
(*) como atajo para importar las seis clases de suavizado empleando una única línea de
código. La segunda sentencia importa un paquete de clases completo.
Para obtener información sobre cómo trabajar con paquetes, consulte “Utilización
N OT A
Una vez finalizada la interpolación inicial, el clip de película ball_mc se interpola de nuevo en
su posición original de 0 píxeles. El siguiente fragmento de código (que se ha modificado para
mayor brevedad) muestra el prototipo de función para el método continueTo():
function continueTo(finish:Number, duration:Number):Void {
/* se omite para ahorrar espacio. */
}
Sólo se pasan dos argumentos al método continueTo(), en lugar de los siete argumentos del
método constructor de Tween, como muestra el siguiente fragmento:
function Tween (obj, prop, func, begin, finish, duration, useSeconds) {
/* se omite para ahorrar espacio. */
}
Los cinco parámetros que no son necesarios para el método continueTo() (obj, prop, func,
begin y useSeconds) utilizan los argumentos que definió anteriormente en la llamada a la
clase Tween. Al llamar al método continueTo(), se da por hecho que los argumentos obj,
prop, func (tipo de suavizado) y useSeconds son los mismos que los de la anterior llamada a
la clase Tween. El método continueTo() utiliza el valor finish de la llamada a la clase
Tween, en lugar de especificar un valor para el argumento begin, como muestra el siguiente
código ActionScript:
import mx.transitions.Tween;
import mx.transitions.easing.*;
var ball_tween:Object = new Tween(ball_mc, "_x", Regular.easeIn, 0, 300, 3,
true);
ball_tween.onMotionFinished = function() {
ball_tween.continueTo(0, 3);
};
this.createEmptyMovieClip("box_mc", this.getNextHighestDepth());
with (box_mc) {
beginFill(0xFF0000, 60);
moveTo(0, 0);
lineTo(20, 0);
lineTo(20, Stage.height);
lineTo(0, Stage.height);
lineTo(0, 0);
endFill();
}
La primera sección del código comienza importando la clase Tween y todas las clases del
paquete de suavizado. En la siguiente sección del código, se crea un nuevo clip de película
con el nombre de instancia box_mc y se dibuja un rectángulo de 20 píxeles de ancho y la
misma altura en el escenario.
Este código crea una nueva interpolación para animar el clip de película box_mc por el
escenario a lo largo del eje x- durante 3 segundos.
4. Seleccione Control > Probar película para probar la animación.
El cuadrado se desplaza de izquierda a derecha y a la inversa. Si la animación no es suave,
puede aumentar la velocidad de fotogramas del documento de 12 fps a 24 fps.
Al aproximarse al borde derecho del escenario, el cuadrado se desplaza fuera de los límites
del escenario. Aunque esto no parezca un problema importante, lo más probable es que no
desee que el rectángulo desaparezca de la vista por un lado del escenario y luego reaparezca
un segundo más tarde desplazándose en la otra dirección.
Para realizar ajustes, aplique animación al rectángulo desde los 0 píxeles hasta la anchura
total del escenario menos la anchura del clip de película box_mc.
5. Para impedir que desaparezca el rectángulo, revise las líneas correspondientes del código del
paso 3 y compruebe que coincide con el siguiente:
var box_tween:Tween = new Tween(box_mc, "_x", Regular.easeInOut, 0,
(Stage.width - box_mc._width), 3, true);
Este código completa dos funcionalidades distintas. La primera sección crea y coloca una
instancia de clip de película y dibuja un rectángulo redondeado negro en el escenario. El
segundo bloque de código aplica un filtro de iluminado al rectángulo en el escenario y
define un controlador de eventos onEnterFrame, que es el responsable de animar el efecto
de filtro. El controlador de eventos onEnterFrame anima el efecto de filtro entre un
desenfoque de 10 y 30 píxeles y, cuando la animación es mayor o igual a 30, o menor o
igual a 10, ésta cambia de dirección.
3. Guarde los cambios en el documento de Flash y seleccione Control > Probar película para
probar el archivo SWF.
Para utilizar la sentencia import, debe especificar ActionScript 2.0 y Flash Player 6 o
N OT A
La sentencia import permite acceder a las clases sin especificar sus nombres completos. Por
ejemplo, para utilizar BlurFilter en un script, debe hacer referencia a esta clase con el nombre
completo (flash.filters.BlurFilter) o importarla; si la importa, puede hacer referencia a ella por
su nombre de clase (BlurFilter) en el código. El siguiente código ActionScript muestra las
diferencias entre utilizar la sentencia import y los nombres de clase completos.
Si no realiza la importación de la clase BlurFilter, el código necesita utilizar el nombre
completo de la clase (nombre del paquete seguido del nombre de la clase) para poder utilizar el
filtro:
// sin importación
var myBlur:flash.filters.BlurFilter = new flash.filters.BlurFilter(10, 10,
3);
La utilización de sentencias import independientes para cada clase del paquete puede resultar
una tarea lenta y con muchas posibilidades de escribir errores. Puede evitar tener que importar
archivos de clase individuales utilizando una importación con comodín, que importa todas las
clases de un cierto nivel de un paquete. El siguiente código ActionScript muestra un ejemplo
de una importación con comodín:
import flash.filters.*; // importa cada clase dentro del paquete
flash.filters
La sentencia import sólo se aplica al script actual (fotograma u objeto) en el que se llama. Por
ejemplo, supongamos que importa todas las clases del paquete macr.util en el fotograma 1
de un documento de Flash. En dicho fotograma, puede hacer referencia a las clases del
paquete por sus nombres de clase en lugar de sus nombres completos. Para utilizar el nombre
de clase en otro script del fotograma, haga referencia a las clases del paquete por sus nombres
completos o añada una sentencia import al otro fotograma que importa las clases en dicho
paquete.
Cuando utilice sentencias import, recuerde que las clases sólo se importan para el nivel
especificado. Por ejemplo, si importa todas las clases del paquete mx.transitions, sólo se
importan las clases dentro del directorio /transitions/, no todas las clases dentro de los
subdirectorios (como las clases del paquete mx.transitions.easing ).
Si importa una clase pero no la utiliza en el script, la clase no se exporta como parte del
S U G E R E N C IA
archivo SWF. Eso significa que puede importar paquetes grandes sin preocuparse del
tamaño del archivo SWF; el código de bytes asociado con una clase se incluye en un
archivo SWF únicamente si dicha clase se utiliza realmente.
Puede acceder y modificar los filtros de la misma forma que lo hace con cualquier objeto de
matriz. Al establecer y obtener los filtros con la propiedad, se devuelve un duplicado del objeto
de filtro, no una referencia.
Para modificar un filtro existente, puede emplear código como el que se muestra en el
siguiente procedimiento.
La primera sección de este código utiliza la interfaz API de dibujo para crear un cuadrado
rojo y coloca la forma en el escenario. La segunda sección del código aplica un filtro de
sombra al cuadrado. A continuación, el código crea una matriz temporal para mantener
los filtros actuales que se aplican el cuadrado rojo en el escenario. La propiedad distance
del primer filtro se establece en 10 píxeles y el filtro modificado se vuelve a aplicar a la
instancia de clip de película my_mc.
3. Seleccione Control > Probar película para probar el documento.
rotación del principal o en otro tipo. El filtro de desenfoque siempre desenfoca bien
horizontal o verticalmente, con independencia de la rotación o el sesgo de cualquier
elemento del árbol de objetos principal.
Si se acerca una vez un objeto de 100 por 100 píxeles, éste utiliza cuatro veces más
A T E NC I Ó N
memoria, ya que las dimensiones del contenido son de 200 por 200 píxeles. Si lo
acerca otras dos veces, la forma se dibuja como objeto de 800 por 800 píxeles que
emplea 64 veces más memoria que el objeto de 100 por 100 píxeles original. Siempre
que utilice filtros en un archivo SWF, resulta recomendable desactivar las opciones de
menú de zoom del menú contextual del archivo SWF.
Cuando se utiliza un filtro de desenfoque, los valores de blurX y blurY que sean
SUGERENCIA
Todos los filtros están disponibles desde ActionScript en Flash Basic 8 y Flash
N OT A
Professional 8.
Este código utiliza una instancia de cargador de clip de película para cargar una imagen
PNG semitransparente. Una vez se ha cargado la imagen, ésta se mueve al centro del
escenario y se le aplica el filtro de iluminado.
3. Seleccione Control > Probar película para probar el documento.
El efecto de filtro de iluminado sólo se aplica al área opaca (no transparente) de la imagen
PNG.
En las siguientes secciones se describe cómo utilizar los filtros:
■ “Utilización del filtro de desenfoque” en la página 542
■ “Utilización del filtro de sombra” en la página 544
■ “Utilización del filtro de iluminado” en la página 548
■ “Creación de iluminados degradados” en la página 550
■ “Utilización del filtro de bisel” en la página 552
■ “Aplicación de un filtro de bisel degradado” en la página 558
■ “Utilización del filtro de matriz de colores” en la página 559
■ “Utilización del filtro de convolución” en la página 561
■ “Utilización del filtro de mapa de desplazamiento” en la página 563
Para ver un ejemplo del uso de ActionScript para aplicar filtros, puede encontrar un archivo de
origen de muestra, Filters.fla, en la carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Filters.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Filters.
La primera sección de este código carga y coloca en el escenario una imagen cargada
dinámicamente. La segunda define un detector al que se llama siempre que se mueve el
ratón. Puede calcular la cantidad de desenfoque horizontal y vertical en función de la
posición actual del puntero del ratón en el escenario. Cuanto más se aleja el puntero del
centro del escenario, más desenfoque se aplica a la instancia.
La primera sección del código crea un nuevo clip de película y utiliza la interfaz API de
dibujo para dibujar un cuadrado rojo. La segunda sección define un detector de ratón al
que se llama siempre que éste se mueve. El detector de ratón calcula la distancia de sombra
y el nivel de desenfoque en función de las posiciones x e y actuales del puntero y vuelve a
aplicar el filtro de sombra. Si hace clic en el cuadrado rojo, aumenta la intensidad de la
sombra.
La primera sección de este código define una instancia de sombra, carga una imagen
externa y vuelve a colocarla en el centro del escenario. La segunda sección define un
detector de ratón al que se llama siempre que se mueve el puntero del ratón por el
escenario. Cuando se mueve el ratón, el controlador de eventos vuelve a calcular la
distancia y el ángulo entre el puntero y la esquina superior izquierda de la imagen.
En función de este cálculo, el filtro de sombra se vuelve a aplicar al clip de película.
3. Seleccione Control > Probar película para probar el documento de Flash.
Cuando se ejecuta el archivo SWF, la sombra sigue al puntero del ratón. Cuanto más se
acerca el puntero a la esquina superior izquierda de la imagen en el escenario, menos efecto
de desenfoque se aplica a la misma. A medida que el puntero se aleja de la esquina superior
izquierda, el efecto de sombra se hace más evidente.
También puede aplicar sombras a imágenes PNG semitransparentes cargadas dinámicamente.
En el siguiente procedimiento, el filtro de sombra sólo se aplica al área sólida, no a la
transparente, de la imagen PNG.
Este código ActionScript utiliza la clase MovieClipLoader para cargar una imagen y
aplicarle un filtro de sombra cuando se ha cargado completamente del servidor remoto.
3. Seleccione Control > Probar película para probar el documento de Flash.
Flash carga una imagen PNG con fondo transparente. Cuando se aplica el filtro de
sombra, sólo se hace a la parte opaca (no transparente) de la misma.
this.createEmptyMovieClip("shapeClip", 10);
with (shapeClip) {
beginFill(0xFF0000, 100);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 100);
lineTo(0, 100);
lineTo(0, 0);
endFill();
}
shapeClip._x = 100;
shapeClip._y = 100;
shapeClip.onPress = function():Void {
glow.strength++;
shapeClip.filters = [glow];
};
var glow:GlowFilter = new GlowFilter(0xCC0000, 0.5, 10, 10, 2, 3);
var mouseListener:Object = new Object();
mouseListener.onMouseMove = function():Void {
glow.blurX = (_xmouse / Stage.width) * 255;
glow.blurY = (_ymouse / Stage.width) * 255;
shapeClip.filters = [glow];
};
Mouse.addListener(mouseListener);
Este código utiliza la interfaz API de dibujo para dibujar un cuadrado en el escenario y
aplica un filtro de iluminado a la forma. Siempre que se mueve el puntero del ratón a lo
largo del eje x o y, el desenfoque del filtro de iluminado se calcula y se aplica a la forma.
3. Seleccione Control > Probar película para probar el documento.
La cantidad de desenfoque horizontal y vertical se calcula en función de la posición
_xmouse e _ymouse del puntero del ratón. A medida que se mueve el puntero del ratón a
la esquina superior izquierda del escenario, disminuye la cantidad de desenfoque
horizontal y vertical. De manera inversa, a medida que se mueve el puntero del ratón a la
esquina inferior derecha del escenario, aumenta la cantidad de desenfoque horizontal y
vertical.
El código anterior se divide en tres secciones. La primera sección del código utiliza la
interfaz API de dibujo para crear un cuadrado y coloca la forma en el escenario. La
segunda define una nueva instancia de filtro de iluminado degradado que crea un
iluminado de rojo a negro. La tercera define un detector de ratón que detecta dos
controladores de eventos de ratón. El primer controlador es onMouseDown, que hace que
aumente la intensidad del iluminado degradado. El segundo controlador es onMouseMove,
al que se llama siempre que se mueve el puntero del ratón dentro del archivo SWF. Cuanto
más se aleje el puntero de la esquina superior izquierda del documento de Flash, mayor
será el efecto de iluminado que se le aplique.
3. Seleccione Control > Probar película para probar el documento.
A medida que se mueve el puntero del ratón por el escenario, aumenta el desenfoque del
filtro de iluminado degradado y disminuye su intensidad. Haga clic en el botón izquierdo
del ratón para aumentar la intensidad del iluminado.
Las distintas propiedades del filtro de bisel degradado controlan la forma en la que se aplica el
filtro. Los colores del bisel degradado se establecen en la matriz de colores. La distribución de
los colores en cada parte del rectángulo la determina la matriz de proporciones. La propiedad
distance determina la distancia de desplazamiento o a qué número de píxeles del objeto se
aplica el filtro de bisel degradado. Las propiedades blurX y blurY controlan la nitidez de los
colores del bisel; unos valores mayores hacen que aparezca más ancho y suave, mientras que
unos valores menores lo muestran más delgado y nítido. La propiedad angle es la fuente de luz
teórica que cae sobre el objeto, lo que produce un efecto de resaltado y sombra en sus bordes.
La propiedad strength controla la extensión de los colores: un valor de intensidad menor
apaga los colores, como ocurre en el ejemplo; por el contrario, un valor mayor hace que los
números exteriores de la matriz sean más intensos, lo que hace que los colores del centro de la
matriz estén menos marcados. Por último, con las propiedades knockout y type se determina
cómo y dónde se aplica el filtro de bisel degradado al objeto completo: si el filtro extrae el
objeto y dónde se coloca este último.
El valor de ángulo determina el ángulo en el que se aplican los colores del degradado al objeto,
es decir, dónde aparecen el resaltado y la sombra en el objeto. Los colores se aplican en el
mismo orden que la matriz.
En el siguiente código se toma un cuadrado rosa (dibujado con la interfaz API de dibujo) y se
le aplica un filtro de degradado de arco iris. Los colores, en el orden en el que aparecen en la
matriz, son los siguientes: azul, verde, púrpura y amarillo (resaltado); rojo (relleno de base);
amarillo, púrpura, verde, negro (sombra). Para determinar los valores de proporción, se
asignan cuatro valores de color de resaltado de 0 a 127, lo que los hace aproximadamente
iguales, y colores de sombra de 129 a 255. Los colores de los bordes externos son azul (16) y
negro (235).
var colors:Array = [0x0000FF, 0x00FF00, 0x9900FF, 0xFFFF00, 0xFF0000,
0xFFFF00, 0x9900FF, 0x00FF00,0x000000];
var alphas:Array = [1, 1, 1, 1, 1, 1, 1, 1, 1];
var ratios:Array = [16, 32, 64, 96, 128, 160, 192, 224, 235];
var gradientBevel:GradientBevelFilter = new GradientBevelFilter(8, 225,
colors, alphas, ratios, 16, 16, 1.3, 2, "inner", false);
En la siguiente ilustración se muestra el filtro de bisel degradado creado por el código anterior, un
bisel de arco iris de nueve colores aplicado a un clip de película en forma de rectángulo rojo:
Este código utiliza la interfaz API de dibujo para dibujar y colocar un cuadrado en el
centro del escenario. Cuando se mueve el puntero de ratón por el escenario, la cantidad de
desenfoque a lo largo de los ejes x e y aumenta o disminuye. Cuando se mueve hacia la
izquierda del escenario, disminuye la cantidad de desenfoque horizontal. Cuando se
mueve hacia la derecha, aumenta el desenfoque. De la misma forma, cuanto más arriba
esté el puntero en el escenario, menor será la cantidad de desenfoque que se aplica a lo
largo del eje y.
3. Seleccione Control > Probar película para probar el documento y ver los resultados.
película.
this.createEmptyMovieClip("shape_mc", 1);
shape_mc.createEmptyMovieClip("holder_mc", 1);
var imageLoader:MovieClipLoader = new MovieClipLoader();
imageLoader.loadClip("http://www.helpexamples.com/flash/images/
image1.jpg", shape_mc.holder_mc);
var matrixArr:Array = [1, 4, 6, 4, 1, 4, 16, 24, 16, 4, 16, 6, 24, 36,
24, 6, 4, 16, 24, 16, 4, 1, 4, 6, 4, 1];
var convolution:ConvolutionFilter = new ConvolutionFilter(5, 5,
matrixArr);
shape_mc.filters = [convolution];
var perlinBmp:BitmapData;
var displacementMap:DisplacementMapFilter;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip):Void {
target_mc._x = (Stage.width - target_mc._width) / 2;
target_mc._y = (Stage.height - target_mc._height) / 2;
perlinBmp = new BitmapData(target_mc._width, target_mc._height);
perlinBmp.perlinNoise(target_mc._width, target_mc._height, 10,
Math.round(Math.random() * 100000), false, true, 1, false);
displacementMap = new DisplacementMapFilter(perlinBmp, new Point(0,
0), 1, 1, 100, 100, "color");
shapeClip.filters = [displacementMap];
};
var shapeClip:MovieClip = this.createEmptyMovieClip("shapeClip", 1);
shapeClip.createEmptyMovieClip("holderClip", 1);
var imageLoader:MovieClipLoader = new MovieClipLoader();
imageLoader.addListener(mclListener);
imageLoader.loadClip("http://www.helpexamples.com/flash/images/
image1.jpg", shapeClip.holderClip);
Mueva el puntero del ratón por el escenario para volver a crear un mapa de desplazamiento
llamando al método perlinNoise(), que cambia la apariencia de la imagen JPEG.
Dado que el fragmento de código anterior devuelve una copia de la matriz de filtros, el código
modifica la copia en vez de la matriz original. Para modificar la propiedad blurX, debería
utilizar el siguiente código ActionScript:
// funciona
var filterArray:Array = my_mc.filters;
filterArray[0].blurX = 20;
my_mc.filters = filterArray;
El procedimiento siguiente desenfoca una imagen en función de la posición actual del puntero
del ratón en el escenario. Cuando se mueve horizontal o verticalmente, las propiedades blurX
y blurY del filtro de desenfoque se modifican en consecuencia.
this.createEmptyMovieClip("holder_mc", 10);
holder_mc.createEmptyMovieClip("img_mc", 20);
holder_mc.img_mc.loadMovie("http://www.helpexamples.com/flash/images/
image2.jpg");
holder_mc.filters = [new BlurFilter(10, 10, 2)];
holder_mc._x = 75;
holder_mc._y = 75;
holder_mc.onMouseMove = function() {
var tempFilter:BlurFilter = holder_mc.filters[0];
tempFilter.blurX = Math.floor((_xmouse / Stage.width) * 255);
tempFilter.blurY = Math.floor((_ymouse / Stage.height) * 255);
holder_mc.filters = [tempFilter];
};
this.createEmptyMovieClip("holder_mc", 10);
holder_mc.createEmptyMovieClip("img_mc", 20);
El código anterior crea una nueva instancia del filtro de sombra y le asigna el nombre
greenDropShadow. El objeto de sombra verde se duplica mediante el método
DropShadowFilter.clone() y se crea un nuevo objeto de filtro denominado
redDropShadow. Ambos filtros se aplican a la instancia de clip de película flower_mc en el
escenario. Si no llamó al método clone(), ambas sombras aparecerán en rojo. Esto se
debe a que al establecer la propiedad redDropShadow.color, se cambian tanto el objeto
de sombra roja como de sombra verde puesto que el primero contiene una referencia al
segundo.
5. Seleccione Control > Probar película para probar el documento de Flash.
El filtro se duplica y clona y ambos filtros se aplican a la instancia flower_mc.
Para más información sobre el método clone(), consulte clone (método
DropShadowFilter.clone) en Referencia del lenguaje ActionScript 2.0. Para obtener información
relacionada, también puede consultar el método clone() de cualquier clase de filtro.
Este código crea un campo de texto con el nombre de instancia status_txt, que sigue al
puntero del ratón y muestra los valores actuales de los parámetros high y low del método
noise(). La función setInterval() cambia el efecto de ruido, que se actualiza cada 100
milisegundos (1 décima de segundo) al llamar de forma continuada a la función
updateNoise(). Los parámetros high y low del método noise() se determinan
calculando la posición actual del puntero en el escenario.
3. Seleccione Control > Probar película para probar el documento.
El movimiento del puntero del ratón a lo largo del eje x tiene un efecto en el parámetro
low; la misma operación en el eje y afecta al parámetro high.
Este ejemplo de código se divide en cinco secciones lógicas. La primera sección importa las
clases necesarias para el ejemplo. El segundo bloque de código crea un clip de película
anidado y carga una imagen JPEG de un servidor remoto. El tercer bloque crea una nueva
instancia de BitmapData denominada perlinBmp, que tiene las mismas dimensiones que
el escenario. La instancia perlinBmp contiene los resultados del efecto de ruido Perlin y se
utiliza como parámetros para el filtro de mapa de desplazamiento. El cuarto bloque de
código crea y aplica el efecto de filtro de mapa de desplazamiento a la imagen cargada
dinámicamente que se creó en un paso anterior. El quinto y último bloque crea un
detector de ratón que regenera el ruido Perlin que emplea el filtro de mapa de
desplazamiento siempre que el usuario mueve el puntero del ratón.
3. Seleccione Control > Probar película para probar el documento de Flash.
Modos de mezcla
Puede aplicar modos de mezcla a objetos de clip de película desde el espacio de trabajo de
Flash (Flash Professional 8) o mediante código ActionScript (Flash Basic 8 y Flash
Professional 8). Durante la ejecución, se mezclan varios gráficos como una única forma. Por
esta razón no se pueden aplicar diferentes modos de mezcla a diferentes símbolos gráficos.
Para más información sobre el uso de ActionScript para aplicar modos de mezcla, consulte
“Aplicación de modos de mezcla” en la página 572.
Los modos de mezcla implican combinar los colores de una imagen (la imagen base) con los
de otra imagen (la imagen de mezcla) para producir una tercera imagen. Cada valor de píxel
de una imagen se procesa con el correspondiente valor de píxel de la otra imagen para
producir un valor de píxel para esa misma posición en el resultado.
La propiedad MovieClip.blendMode admite los siguientes modos de mezcla:
add Suele utilizarse para crear un efecto de disolución de aclarado animado entre dos
imágenes.
alpha Suele utilizarse para aplicar la transparencia del primer plano al fondo.
darken Suele utilizarse para superponer el tipo.
difference Suele utilizarse para crear colores más vivos.
function cbListener(eventObj:Object):Void {
img_mc.blendModeType_mc.blendMode = eventObj.target.value;
}
blendMode_cb.addEventListener("change", cbListener);
Este código ActionScript rellena el cuadro combinado con cada tipo de modo de mezcla
para que el usuario pueda ver cada efecto en la imagen cargada dinámicamente. Se crea un
objeto detector, que se utiliza con la instancia MovieClipLoader. El objeto detector define
un detector de evento único, onLoadInit, al que se llama cuando la imagen se ha
descargado completamente y se ha inicializado en Flash. El detector de eventos crea un
nuevo clip de película denominado blendModeType_mc y utiliza la interfaz API de dibujo
para dibujar una forma rectangular sobre la mitad izquierda de la imagen. El modo de
mezcla seleccionado actualmente para la instancia de ComboBox se aplica al clip de
película blendModeType_mc.
El resto del código establece la instancia de MovieClipLoader, que es la responsable de
cargar la imagen especificada en un clip de película en el escenario. Por último, se define
un detector para la instancia de ComboBox blendMode_cb, que aplica el modo de mezcla
seleccionado siempre que se selecciona un nuevo elemento de la instancia de ComboBox.
4. Seleccione Control > Probar película para probar el documento.
2. Si utiliza el método setMask() y la máscara tiene una caché de mapa de bits, Flash realiza
una mezcla de alfa entre las dos imágenes.
3. A continuación se aplican los filtros (desenfoque, sombra, iluminado, etc.)
4. Si utiliza la clase ColorTransform, se realiza la operación de transformación de color y se
almacena en caché como resultado de mapa de bits.
5. Si aplica un modo de mezcla, la mezcla se realiza en este momento (mediante un procesador
de vectores).
6. Si aplica capas de máscaras externas, las capas ejecutan las máscaras (mediante un
procesador de vectores).
Este código dibuja una línea en el escenario desde 0,0 a 200,100. A continuación, sus
coordenadas _x e _y se modifican para colocarla en 100,100.
3. Guarde el documento de Flash y seleccione Control > Probar película para probar el
archivo SWF.
Para dibujar una forma más compleja, siga llamando al método MovieClip.lineTo() y dibuje un
rectángulo, un cuadrado o un óvalo, como se muestra en el siguiente procedimiento.
3. Guarde el documento de Flash y seleccione Control > Probar película para probarlo.
Este código utiliza la interfaz API de dibujo para dibujar un círculo en el escenario. La
forma de círculo sólo emplea cuatro llamadas al método MovieClip.curveTo() y por
tanto puede aparecer algo distorsionada. Para ver otro ejemplo que utiliza la interfaz API
de dibujo para crear un círculo, consulte el procedimiento al respecto en “Dibujo de
formas específicas” en la página 577 para obtener un código que utiliza ocho llamadas al
método MovieClip.curveTo() para que el círculo resulte más realista.
En este código, el clip de película vacío (triangle_mc) llama a los métodos de dibujo.
Este código dibuja un triángulo con líneas de color púrpura de 5 píxeles y sin relleno.
3. Guarde el documento de Flash y seleccione Control > Probar película para probarlo.
Flash dibuja un rectángulo verde sencillo en el escenario y lo coloca en 100,100. Para
cambiar sus dimensiones o su color de relleno o transparencia, puede cambiar dichos
valores en la llamada al método drawRectangle() en lugar de tener que modificar el
contenido de MovieClip.beginFill().
También puede crear un rectángulo con las esquinas redondeadas mediante la interfaz API de
dibujo, como muestra el procedimiento siguiente.
3. Guarde el documento de Flash y seleccione Control > Probar película para probarlo.
Aparece un rectángulo de color verde en el escenario que tiene 240 píxeles de ancho por
180 de alto y esquinas redondeadas de 20-píxeles. Puede generar varias instancias de los
rectángulos redondeados creando nuevos clips de película con
MovieClip.createEmptyMovieClip() y llamando a la función personalizada
drawRoundedRectangle().
Asimismo, puede crear un círculo perfecto mediante la interfaz API de dibujo como se
muestra en el siguiente procedimiento.
3. Guarde el documento de Flash y seleccione Control > Probar película para probar el
archivo SWF.
Este código crea un círculo más complejo y realista que el del ejemplo anterior. En lugar de
utilizar sólo cuatro llamadas a curveTo(), emplea ocho llamadas a este método, lo que da a la
forma una apariencia mucho más redondeada.
La interfaz API de dibujo también permite crear un triángulo, como se muestra en el siguiente
procedimiento.
El código ActionScript anterior utiliza la interfaz API de dibujo para crear un cuadrado en
el escenario y llama al método beginGradientFill() para rellenarlo con un degradado
circular rojo y azul.
3. Guarde el documento de Flash y seleccione Control > Probar película para ver el archivo
de Flash.
En el siguiente procedimiento se muestra la diferencia existente entre los tres nuevos estilos de
extremos de Flash Player 8: none, round y square.
El código anterior utiliza la interfaz API de dibujo para dibujar dos líneas en el escenario.
La primera línea es roja y tiene un grosor de 0, que indica el grosor muy fino; la segunda
línea es azul y tiene un grosor de 1 píxel.
Resulta útil activar la escala para los elementos de la interfaz de usuario cuando se
S U G E R E N C IA
El código anterior utiliza la interfaz API de dibujo para dibujar tres líneas, cada una de
ellas con un valor distinto para capsStyle.
3. Seleccione Control > Probar película para probar el documento de Flash.
Se pueden establecer los siguientes tres tipos de estilos de junta para el parámetro
jointStyle:
Flash utiliza la interfaz API de dibujo para dibujar tres triángulos en el escenario.
Cada uno de ellos presenta un valor distinto para su estilo de junta.
3. Guarde el documento de Flash y seleccione Control > Probar película para probarlo.
De forma predeterminada, la instancia del componente Button tiene 100 píxeles de ancho
y 22 píxeles de alto.
4. Cambie su tamaño a 200 píxeles de ancho por 44 píxeles de alto mediante el inspector de
propiedades.
Puede activar guías para la escala en 9 divisiones en el entorno de Flash desde los cuadros de
diálogo Convertir en símbolo o Propiedades de símbolo. La casilla de verificación Activar
guías para escala en 9 divisiones sólo se encuentra disponible si se publica para Flash Player 8 y
el comportamiento se establece como clip de película. Las guías de escala en 9 divisiones no
están disponibles en versiones anteriores de Flash o si se crea un símbolo de gráfico o botón.
La escala en 9 divisiones se puede activar en ActionScript estableciendo la propiedad
scale9Grid en una instancia de clip de película.
Tanto si creó las guías de división con la interfaz de usuario o mediante ActionScript, puede
trazar la coordenada x, la coordenada y, la anchura y la altura estableciendo la propiedad
scale9Grid del clip de película.
trace(my_mc.scale9Grid); // (x=20, y=20, w=120, h=120)
Este fragmento de código traza el valor del objeto Rectangle que utiliza la propiedad
scale9Grid. El rectángulo tiene unas coordenadas x e y de 20 píxeles, una anchura de
120 píxeles y una altura de 120 píxeles.
Creación de interacciones
con ActionScript
14
En animaciones sencillas, Macromedia Flash Player reproduce las escenas y los fotogramas de
un archivo SWF de forma secuencial. En un archivo SWF interactivo, los usuarios utilizan el
teclado y el ratón para ir a distintas partes del archivo SWF, mover objetos, introducir
información en formularios y llevar a cabo otras operaciones interactivas.
ActionScript sirve para crear scripts que indican a Flash Player la acción que debe llevar a cabo
cuando ocurra un evento. Algunos eventos que desencadenan un script se producen cuando la
cabeza lectora llega a un fotograma, cuando se carga o descarga un clip de película o cuando el
usuario hace clic en un botón o presiona una tecla.
Los scripts pueden constar de un solo comando, como indicar a un archivo SWF que se
detenga, o bien de una serie de comandos y sentencias, como comprobar primero una
condición y, a continuación, realizar una acción. Muchos comandos de ActionScript son
sencillos y permiten crear controles básicos para un archivo SWF. Otras requieren un cierto
dominio de los lenguajes de programación y están pensadas para operaciones avanzadas.
Para más información sobre la creación de interacción con ActionScript, consulte los
siguientes temas:
Eventos e interacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Control de la reproducción de archivos SWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Creación de interactividad y efectos visuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
Creación de vinculaciones de datos durante la ejecución mediante ActionScript . . 614
Análisis de un script de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .623
595
Eventos e interacciones
Siempre que un usuario hace clic en el ratón o presiona una tecla, dicha acción genera un
evento. Estos tipos de eventos suelen denominarse eventos de usuario, ya que se generan como
respuesta a alguna acción llevada a cabo por el usuario. Puede escribir código de ActionScript
para responder a estos eventos o gestionarlos. Por ejemplo, cuando un usuario hace clic en un
botón, puede enviar la cabeza lectora a otro fotograma del archivo SWF o cargar una nueva
página Web en el navegador.
En un archivo SWF, los botones, los clips de película y los campos de texto generan eventos a
los que se puede responder. ActionScript dispone de tres modos de gestionar eventos: métodos
de controlador de eventos, detectores de eventos y controladores on() y onClipEvent(). Para
más información sobre eventos y su gestión, consulte el Capítulo 9, “Gestión de eventos”.
En el ejemplo final, la función gotoAndStop() global se utiliza para mover la cabeza lectora al
fotograma 1 de la escena 2. Si no se ha especificado la escena, la cabeza lectora va al fotograma
especificado en la escena actual. Puede utilizar el parámetro scene únicamente en la línea de
tiempo de raíz, no en las líneas de tiempo de los clips de película u otros objetos del
documento.
nextScene_mc.onRelease = function() {
gotoAndStop("Scene 2", 1);
}
El mismo código del controlador de eventos on() produce un resultado diferente al asociarlo
a un objeto de clip de película, en lugar de a un botón. Al asociar dicho código a un objeto de
botón, las sentencias que se creen en un controlador on() se aplican, de forma
predeterminada, a la línea de tiempo que contiene el botón. Sin embargo, al asociarlas a un
objeto de clip de película, las sentencias realizadas en un controlador on() se aplican al clip de
película al que se encuentra asociado al controlador on().
Por ejemplo, el siguiente código del controlador onPress() detiene la línea de tiempo del clip
de película al que se encuentra asociado el controlador, no la línea de tiempo que contiene el
clip de película:
//Asociado a la instancia del clip de película myMovie_mc
myMovie_mc.onPress() {
stop();
};
También puede enviar variables junto con la URL, mediante los métodos GET o POST. Esto
resulta útil si la página que está cargando desde un servidor de aplicaciones, como la página
del servidor ColdFusion (CFM), espera recibir variables de formulario. Por ejemplo, suponga
que desea cargar una página de CFM llamada addUser.cfm que espera obtener dos variables de
formulario: firstName y age. Para ello, puede crear un clip de película llamado variables_mc
que defina dichas variables tal como se muestra en el siguiente ejemplo:
variables_mc.firstName = "Francois";
variables_mc.age = 32;
Para más información, consulte getURL function en Referencia del lenguaje ActionScript 2.0.
El siguiente procedimiento muestra diversas formas de obtener la posición del puntero dentro
de la línea de tiempo principal o dentro de un clip de película.
5. Seleccione Control > Probar película para probar la película de Flash. Los campos box1_txt
y box2_txt muestran la posición del puntero mientras lo desplaza por el escenario.
Para más información sobre las propiedades _xmouse e _ymouse, consulte _xmouse
(propiedad MovieClip._xmouse) y _ymouse (propiedad MovieClip._ymouse) en Referencia
del lenguaje ActionScript 2.0.
Asegúrese de que selecciona Control > Deshabilitar métodos abreviados de teclado, ya que, de
lo contrario, algunas teclas con comportamiento incorporado no se sustituirán cuando utilice
Control > Probar película para probar la aplicación. Consulte el parámetro keyPress de on
handler en Referencia del lenguaje ActionScript 2.0.
Puede utilizar los métodos de la clase incorporada Key para detectar la última tecla que ha
presionado el usuario. La clase Key no requiere una función constructora; para utilizar sus
métodos, llame a los métodos de la clase, como se muestra en el ejemplo siguiente:
Key.getCode();
Puede obtener códigos de tecla virtuales o valores ASCII (código americano estándar para
intercambio de información) de la tecla que haya sido presionada:
■ Para obtener el código de tecla virtual de la última tecla presionada, utilice el método
getCode().
■ Para obtener el valor ASCII de la última tecla presionada, utilice el método getAscii().
4. Añada el siguiente código ActionScript debajo del código existente en el panel Acciones:
this.createTextField("display_txt", 999, 0, 0, 100, 20);
5. Para crear un controlador de eventos para el clip de película del coche que compruebe qué
tecla de flecha (izquierda, derecha, arriba o abajo) se encuentra presionada, añada el código
siguiente en el panel Acciones:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
};
Key.addListener(keyListener);
6. Para comprobar que está presionando la tecla de flecha izquierda y para mover el clip de
película del coche en esa dirección, añada el código al cuerpo del controlador de eventos
onEnterFrame.
El código debería parecerse al del siguiente ejemplo (el código nuevo está en negrita):
var distance:Number = 10;
this.createTextField("display_txt", 999, 0, 0, 100, 20);
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
if (Key.isDown(Key.LEFT)) {
car_mc._x = Math.max(car_mc._x - distance, 0);
display_txt.text = "Left";
}
};
Key.addListener(keyListener);
7. Para hacer que el botón de color azul cambie el color del clip de película car_mc a azul,
añada el código siguiente al panel Acciones:
blue_btn.onRelease = function() {
colorTrans.rgb = 0x333399; // azul
trans.colorTransform = colorTrans;
};
blue_btn.onRelease = function() {
colorTrans.rgb = 0x333399; // azul
trans.colorTransform = colorTrans;
};
red_btn.onRelease = function() {
colorTrans.rgb = 0xFF0000; // rojo
trans.colorTransform = colorTrans;
};
green_btn.onRelease = function() {
colorTrans.rgb = 0x006600; // verde
trans.colorTransform = colorTrans;
};
black_btn.onRelease = function() {
colorTrans.rgb = 0x000000; // negro
trans.colorTransform = colorTrans;
};
Este código primero detiene el clip de película speaker. A continuación, crea un objeto
Sound (song_sound) nuevo y lo asocia al sonido cuyo identificador de vínculo es
a_thousand_ways. Los controladores de eventos onRelease asociados con los objetos
playButton y stopButton inician y detienen el sonido mediante los métodos
Sound.start() y Sound.stop(). Asimismo, reproducen y detienen el sonido asociado.
7. Seleccione Control > Probar película para oír el sonido.
volume_mc.handle_btn.onPress = function() {
startDrag(this._parent, false, this._parent.left, this._parent.top,
this._parent.right, this._parent.bottom);
};
volume_mc.handle_btn.onRelease = function() {
stopDrag();
var level:Number = Math.ceil(this._parent._x - this._parent.left);
this._parent._parent.song_sound.setVolume(level);
this._parent._parent.volume_txt.text = level;
};
volume_mc.handle_btn.onReleaseOutside = slider_mc.handle_btn.onRelease;
Los parámetros de starDrag() left, top, right y bottom son variables definidas en una
acción de clip de película.
10. Seleccione Control > Probar película para utilizar el deslizador de volumen.
Los parámetros de starDrag() left, top, right y bottom son variables definidas en una
acción de clip de película.
9. Seleccione Control > Probar película para utilizar el deslizador de balance.
Para más información sobre los métodos de la clase Sound, consulte Sound en Referencia del
lenguaje ActionScript 2.0.
car_mc.onPress = function() {
this.startDrag(false);
updateAfterEvent();
};
car_mc.onRelease = function() {
this.stopDrag();
};
5. Seleccione Control > Probar película y arrastre el clip de película para comprobar la
detección de una colisión.
Siempre que el recuadro de delimitación del coche tenga un punto de intersección con el
recuadro de delimitación del área, el estado es true.
Para más información, consulte hitTest (método MovieClip.hitTest) en Referencia del lenguaje
ActionScript 2.0.
Para crear una vinculación entre dos componentes TextInput mediante código
ActionScript:
1. Cree un nuevo documento de Flash denominado panel_as.fla.
2. Arrastre dos copias del componente TextInput al escenario.
3. Asigne a los componentes los siguientes nombres de instancias: in_ti y out_ti.
4. Seleccione Ventana > Bibliotecas comunes > Clases y abra la nueva biblioteca común
llamada Classes.fla.
5. Arrastre una copia del componente DataBindingClasses al panel Biblioteca o arrastre el
componente al escenario y elimínelo.
Podrá cerrar la biblioteca común cuando termine. Tras eliminar el componente
DataBindingClasses del escenario, Flash conserva una copia en la biblioteca.
Si olvida eliminar el componente DataBindingClasses del escenario, el icono del
SUGERENCIA
Este código ActionScript crea dos puntos finales de la vinculación de datos, uno por cada
componente vinculado. El primer punto final que cree definirá cuál es el componente de
origen de la vinculación (in_ti), qué propiedad debe controlarse (text) y qué evento
accionará la vinculación (focusOut). El segundo punto final creado sólo incluye el
componente y la propiedad (out_ti y text, respectivamente). Finalmente, la vinculación
entre dos puntos finales se crea al llamar al constructor de la clase Binding (new
Binding(src, dest)).
No es necesario utilizar nombres de clases completos (como, por ejemplo,
mx.data.binding.EndPoint) en el código ActionScript, como se observa en el primer
fragmento de código. Si utiliza la sentencia import al comienzo del código, evitará tener
que utilizar los nombres completos. Al importar todas las clases del paquete
mx.data.binding mediante el comodín * (el paquete incluye las clases EndPoint y
Binding), conseguirá que el código sea más breve y que se haga referencia directamente a
las clases EndPoint y Binding. Para más información sobre sentencias import, consulte la
entrada import de Referencia del lenguaje ActionScript 2.0.
8. Seleccione Control > Probar película para comprobar este código en el entorno de prueba.
Introduzca texto en el campo de introducción de texto in_ti.
Una vez que la instancia in_ti deje de estar seleccionada (haga clic en el escenario,
presione Tab o haga clic en el segundo campo), Flash copiará el texto introducido en
in_ti en el campo de texto out_ti.
9. Seleccione Archivo > Guardar para guardar los cambios.
Los dos cambios que debe realizar en el código ActionScript hacen lo siguiente:
■ Definir una propiedad de evento para la instancia EndPoint de destino.
■ Definir dos parámetros adicionales para el constructor de Binding.
Utilice el primer parámetro para opciones de formato avanzadas; el valor puede
establecerse como null o undefined. El segundo parámetro define si la vinculación es
bidireccional (true) o unidireccional (false).
Puede que se pregunte por la procedencia del evento focusOut. Ese es el punto en el que
el código ActionScript se vuelve complicado. Puede investigar la clase TextInput y utilizar
algunos de los métodos enumerados (como change() o enter()), pero no encontrará en
ella el evento focusOut. La clase TextInput hereda de las clases UIObject y
UIComponent. Si observa la clase UIComponent, que añade capacidad de selección para
componentes, verá cuatro eventos adicionales: focusIn, focusOut, keyDown y keyUp.
Puede utilizar estos eventos con el componente TextInput.
Deberá utilizar objetos para definir los puntos finales en lugar de crear nuevas instancias
de la clase EndPoint, como se muestra en los ejercicios anteriores de esta sección. El
fragmento de código de este paso crea dos objetos que actúan como puntos finales de la
vinculación. La vinculación se crea al llamar al constructor de la clase Binding. Para
reducir aún más la cantidad de código (pero también la legibilidad de éste), defina objetos
en línea como se muestra en el siguiente fragmento:
new mx.data.binding.Binding({component:my_ch, property:"selected",
event:"click"}, {component:my_lbl, property:"text"});
Este código ActionScript reduce la legibilidad del código, pero también reduce la cantidad
de código que es preciso introducir. Si comparte los archivos FLA (o de ActionScript),
puede que desee utilizar el primer fragmento de código ActionScript, ya que resulta más
fácil de leer.
En la primera sección del código, se define la nueva clase denominada DateFormat, que
amplía la clase CustomFormatter del paquete mx.data.binding. Recuerde que Flash
compila las clases de vinculación del archivo de componente DataBindingClasses, por lo
que no puede verlas directamente ni localizarlas en la carpeta Classes del directorio de
instalación de Flash.
El único método que deberá utilizar es el método format(), que convierte la instancia de
fecha a un formato de cadena personalizado. El siguiente paso consiste en crear una matriz
de nombres de meses para que el resultado final se parezca más a NOV 4, 2004 que al
formato de fecha predeterminado. Recuerde que las matrices están basadas en cero en
Flash, por lo que, si el valor de rawValue.getMonth() devuelve 1, representa a February
(febrero) y no a January (enero, ya que January es el mes 0). El código restante crea la
cadena con formato personalizado concatenando valores y devolviendo la cadena
returnValue.
Podría surgir un problema al trabajar con clases con un clip compilado, lo que puede ver
en el fragmento anterior. Dado que está ampliando una clase ubicada en la clase
DataBindingClasses y ésta no está disponible de inmediato para Flash, verá el siguiente
error al revisar la sintaxis de la clase anterior:
**Error** <path to DateFormat class>\DateFormat.as: Line 1: The class
'mx.data.binding.CustomFormatter' could not be loaded.
class DateFormat extends mx.data.binding.CustomFormatter {
Probablemente el código no presente ningún error. Este problema tiene lugar cuando
Flash no encuentra la clase y, a consecuencia de ello, se produce un error durante la
revisión sintáctica.
En esta ocasión, se define un objeto customFormatter que indica a Flash que está
utilizando la clase DateFormat recién creada para dar formato al punto final de la
vinculación.
7. Guarde los cambios en el documento y seleccione Control > Probar película para
comprobar el código.
La primera línea del código ActionScript importa las clases del paquete mx.data.binding
para que no tenga que utilizar las rutas completas en el código. Las dos líneas siguientes
del código ActionScript asocian los componentes de la biblioteca del documento al
escenario. Seguidamente, se sitúan los componentes en el escenario.
Finalmente, deberá añadir datos a la instancia de ComboBox y crear la vinculación entre el
componente ComboBox my_cb y el componente Label my_lbl del escenario.
reset_btn.onRelease = function() {
zapped = false;
bug_mc._x = initx;
bug_mc._y = inity;
bug_mc._alpha = 100;
bug_mc._rotation = 0;
};
bug_mc.onPress = function() {
this.startDrag();
};
bug_mc.onRelease = function() {
this.stopDrag();
};
bug_mc.onEnterFrame = function() {
if (this.hitTest(this._parent.zapper_mc)) {
this.stopDrag();
zapped = true;
bug_mc._alpha = 75;
bug_mc._rotation = 20;
this._parent.zapper_mc.play();
}
if (zapped) {
bug_mc._y += 25;
}
};
Utilización de imágenes,
sonido y vídeo
15
Si importa una imagen o un sonido mientras edita un documento en Macromedia Flash Basic
8 o en Macromedia Flash Professional 8, la imagen y el sonido se empaquetan y se almacenan
en el archivo SWF al publicarlo. Además de importar elementos multimedia durante el
proceso de edición, puede cargar elementos multimedia externos, incluidos otros archivos
SWF, en tiempo de ejecución. Puede que desee excluir archivos multimedia de un documento
de Flash por varias razones.
Reducir el tamaño de archivo Si excluye grandes archivos multimedia del documento de
Flash y los carga en tiempo de ejecución, puede reducir el tiempo de descarga inicial de las
aplicaciones y presentaciones, especialmente si la conexión a Internet es lenta.
Dividir en módulos grandes presentaciones Puede dividir una presentación o aplicación
de gran tamaño en archivos SWF independientes y cargarlos como desee en tiempo de
ejecución. Este proceso reduce el tiempo de descarga inicial y facilita el mantenimiento y la
actualización de la presentación.
Separar el contenido de la presentación Éste es un tema común en el desarrollo de
aplicaciones, especialmente en las aplicaciones basadas en datos. Por ejemplo, una aplicación
de cesta de la compra puede mostrar una imagen de cada producto. Si carga cada imagen en
tiempo de ejecución, puede actualizar fácilmente la imagen de un producto sin modificar el
archivo FLA original.
Beneficiarse de las funciones que son sólo de tiempo de ejecución Algunas funciones,
como por ejemplo la reproducción de Flash Video (FLV) y MP3 cargados dinámicamente,
sólo están disponibles en tiempo de ejecución mediante ActionScript.
En esta sección se describe la forma de trabajar con archivos de imágenes, sonido y vídeo FLV
en las aplicaciones de Flash. Para más información, consulte los siguientes temas:
Carga y trabajo con archivos multimedia externos . . . . . . . . . . . . . . . . . . . . . . . . . . .628
Carga de archivos de imagen y SWF externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .629
Carga y utilización de archivos MP3 externos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .634
Asignación de vinculación a elementos de la biblioteca . . . . . . . . . . . . . . . . . . . . . .639
Utilización de vídeo FLV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Creación de animaciones progresivas para archivos multimedia . . . . . . . . . . . . . .662
627
Carga y trabajo con archivos multimedia
externos
Puede cargar varios tipos de archivos multimedia en una aplicación de Flash en tiempo de
ejecución. archivos SWF, MP3, JPEG, GIF, PNG y FLV. No obstante, no todas las versiones
de Flash Player admiten todos los tipos de archivos multimedia. Para más información sobre
los tipos de archivos de imagen que se admiten en Macromedia Flash Player 8, consulte
“Carga de archivos de imagen y SWF externos” en la página 629. Para obtener información
sobre la compatibilidad con vídeo FLV en Flash Player, consulte “Utilización de vídeo FLV”
en la página 640.
Macromedia Flash Player puede cargar archivos multimedia externos desde cualquier
dirección HTTP o FTP, desde un disco local utilizando una ruta relativa o mediante el
protocolo file://.
Para cargar archivos SWF y de imagen externos, puede utilizar la función loadMovie() o
loadMovieNum(), el método MovieClip.loadMovie() o el método
MovieClipLoader.loadClip(). Los métodos de clases ofrecen normalmente más funciones
y flexibilidad que las funciones globales, por lo que resultan adecuadas para aplicaciones
complejas. Al cargar un archivo SWF o de imagen, debe especificarse un clip de película o
nivel de archivo SWF como destino de dichos archivos. Para más información sobre cómo
cargar archivos SWF y de imagen, consulte “Carga de archivos de imagen y SWF externos” en
la página 629.
Para reproducir un archivo MP3 externo, utilice el método loadSound() de la clase Sound.
Este método permite especificar si el archivo MP3 se debe descargar progresivamente o
terminar de descargarse por completo antes de empezar a reproducirse. También puede leer la
información ID3 incorporada en los archivos MP3, si están disponibles. Para más
información, consulte “Lectura de etiquetas ID3 en archivos MP3” en la página 638.
Flash Video es el formato de vídeo nativo que utiliza Flash Player. Los archivos FLV se pueden
reproducir a través de HTTP o desde el sistema de archivos local. La reproducción de archivos
FLV externos ofrece varias ventajas frente a la incorporación de vídeo en un documento de
Flash como, por ejemplo, mejor rendimiento y administración de la memoria, así como
velocidades de fotogramas de vídeo y Flash independientes. Para más información, consulte
“Reproducción dinámica de archivos FLV externos” en la página 643.
El ejemplo siguiente carga la imagen JPEG image1.jpg en la instancia del clip de película
image_mc:
image_mc.loadMovie("http://www.helpexamples.com/flash/images/image1.jpg");
Para más información sobre cómo cargar archivos SWF y de imagen externos, consulte “Carga
de archivos SWF y la línea de tiempo raíz” en la página 633.
Para precargar archivos SWF y JPEG en instancias de clip de película, se puede utilizar la clase
MovieClipLoader. Esta clase proporciona un mecanismo detector de eventos para notificar
sobre el estado de las descargas de archivos en clips de película. Para utilizar un objeto
MovieClipLoader para precargar archivos SWF y JPEG, debe realizar lo siguiente:
Cree un nuevo objeto MovieClipLoader Puede usar un solo objeto MovieClipLoader para
realizar un seguimiento del progreso de descarga de varios archivos o para crear un objeto por
separado para el progreso de cada archivo. Cree un nuevo clip de película, cargue el contenido
en él y luego cree el objeto MovieClipLoader como se muestre en el código siguiente:
this.createEmptyMovieClip("img_mc", 999);
var my_mcl:MovieClipLoader = new MovieClipLoader();
Cree un objeto detector y cree controladores de eventos El objeto detector puede ser un
objeto de ActionScript cualquiera como, por ejemplo, un objeto genérico Object, un clip de
película o un componente personalizado.
Registre el objeto detector con el objeto MovieClipLoader Para que el objeto detector
reciba los eventos de carga, debe registrarlo con el objeto MovieClipLoader, como se muestra
en el siguiente código:
my_mcl.addListener(mclListener);
Sólo puede usar los métodos MovieClipLoader para realizar un seguimiento del
N O TA
this.createEmptyMovieClip("img_mc", 999);
Para obtener información relacionada, consulte “Carga de archivos SWF y la línea de tiempo
raíz” en la página 633. Para más información sobre la clase MovieClipLoader, consulte
MovieClipLoader en Referencia del lenguaje ActionScript 2.0. Para obtener información sobre
la creación de la animación de una barra de progreso, consulte “Creación de una animación de
progreso para cargar archivos SWF y de imagen” en la página 663.
Puede encontrar muestras de aplicaciones de galerías de fotos en el disco duro. Estos archivos
proporcionan ejemplos de cómo utilizar ActionScript para controlar dinámicamente clips de
película mientras se cargan archivos de imagen en un archivo SWF. Los archivos de origen de
muestra gallery_tree.fla y gallery_tween.fla se pueden encontrar en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Galleries.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Galleries.
Utilice el nuevo objeto para llamar a loadSound() a fin de cargar un evento o un flujo de
sonido. Los sonidos de evento se cargan completamente antes de reproducirse; los flujos de
sonido se reproducen a medida que se descargan. Puede establecer el parámetro isStreaming
del método loadSound() para especificar un sonido como un flujo de sonido o un sonido de
evento. Tras cargar un sonido de evento, debe llamar al método start() de la clase Sound
para reproducir el sonido. Los flujos de sonido empiezan a reproducirse cuando se han
cargado suficientes datos en el archivo SWF; no es necesario utilizar start().
Por ejemplo, el código siguiente crea un objeto Sound, denominado my_sound, y después
carga un archivo MP3 denominado song1.mp3. Incluya el código ActionScript siguiente en el
fotograma 1 de la línea de tiempo:
var my_sound:Sound = new Sound();
my_sound.loadSound("http://www.helpexamples.com/flash/sound/song1.mp3",
true);
Para obtener una lista de etiquetas ID3 admitidas, consulte id3 (propiedad Sound.id3) en
Referencia del lenguaje ActionScript 2.0.
El archivo de origen de muestra que carga archivos MP3, jukebox.fla, se puede encontrar en la
carpeta Samples del disco duro. Este ejemplo muestra cómo crear un jukebox mediante el uso
de tipos de datos, principios generales de programación y varios componentes:
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\Components\Jukebox.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/Components/Jukebox.
7 7, 8
On2 VP6 6 8*
7 8
8 8
* Si su archivo SWF carga un archivo FLV, puede utilizar vídeo On2 VP6 sin tener que
volver a publicar el archivo SWF para Flash Player 8, siempre que los usuarios utilicen
Flash Player 8 para ver el archivo SWF. Sólo Flash Player 8 admite tanto la publicación
como la reproducción de vídeo On2 VP6.
Para más información sobre el vídeo FLV, consulte los temas siguientes:
■ “Creación de un objeto de vídeo” en la página 642
■ “Reproducción dinámica de archivos FLV externos” en la página 643
■ “Creación de un anuncio de vídeo” en la página 644
■ “Precarga de archivos FLV” en la página 647
■ “Trabajo con puntos de referencia (cuepoints)” en la página 648
■ “Utilización de metadatos” en la página 658
■ “Configuración de archivos FLV para alojar en el servidor” en la página 660
■ “Utilización de archivos FLV locales en Macintosh” en la página 661
13. Seleccione Insertar > Línea de tiempo > Capa para crear una nueva capa y asígnele el
nombre button.
14. Seleccione la herramienta Rectángulo en el panel Herramientas.
15. En la sección Colores del panel Herramientas, haga clic en el icono de lápiz para seleccionar
el control Color de trazo.
16. Seleccione Sin color, de modo que se desactiva el contorno del rectángulo.
17. Arrastre el puntero diagonalmente por el escenario para crear un rectángulo.
El tamaño del rectángulo no importa ya que cambiará las dimensiones con el inspector de
propiedades.
18. Haga clic en la herramienta Selección del panel Herramientas y, a continuación, haga clic
en el rectángulo del escenario para seleccionarlo.
19. Con el rectángulo seleccionado, introduzca 468 en el cuadro de texto de anchura y 60 en
el cuadro de texto de altura del inspector de propiedades. A continuación, cambie las
coordenadas X e Y (cuadros X e Y) a 0.
20.Con el rectángulo seleccionado en el escenario, presione F8 para cambiar el rectángulo a
un símbolo.
la caché del disco duro (al probar este ejemplo o al cargarlo mediante otro
procedimiento). Si ocurre esto, cargue un archivo FLV en el servidor y cárguelo en
su lugar.
function traceMeta(metaProp:Object):Void {
var p:String;
for (p in metaProp) {
switch (p) {
case "cuePoints" :
Para ver los cuepoints de la ficha Parámetros, debe escribir el nombre del archivo FLV
N OT A
function clickMe(){
my_flvPb.seekToNextNavCuePoint();
}
my_button.addEventListener("click", clickMe);
8. Seleccione Control > Probar película para probar el código.
El archivo cuepoints.flv contiene tres cuepoints de navegación: uno cerca del principio, en
medio y al final del archivo de vídeo. Al hacer clic en el botón, la instancia FLVPlayback
busca el siguiente cuepoint hasta que llega al último cuepoint del archivo de vídeo.
También puede buscar un cuepoint especificado en un archivo FLV mediante el método
seekToCuePoint(), como se muestra en el ejemplo siguiente.
function clickMe(){
my_flvPb.seekToNavCuePoint("point2");
}
my_button.addEventListener("click", clickMe);
Utilización de metadatos
Puede utilizar el método onMetaData para ver la información de metadatos en el archivo FLV.
Los metadatos incluyen información sobre el archivo FLV, como la duración, anchura, altura y
velocidad de fotograma. La información de metadatos que añade al archivo FLV depende del
software que utilice para codificar el archivo o del software que emplee para añadir
información de metadatos.
Para trabajar con NetStream.onMetaData, debe tener Flash Video que contenga metadatos.
Si codifica archivos FLV con Flash 8 Video Encoder, el archivo FLV incluirá información de
metadatos (consulte el ejemplo siguiente para ver una lista de metadatos en un archivo FLV
codificado con Flash 8 Video Encoder).
Flash Video Exporter 1.2 y versiones posteriores (incluido Flash 8 Video Exporter),
N O TA
añaden los metadatos a los archivos FLV. Sorenson Squeeze 4.1 y versiones
posteriores también añaden metadatos a los archivos de vídeo.
También puede utilizar el siguiente formato para mostrar la mayora parte de la información de
metadatos. Por ejemplo, el siguiente código muestra la duración de un archivo FLV:
nStream.onMetaData = function(myMeta) {
trace("FLV duration: " + myMeta.duration + " sec.");
};
Este formato no puede trazar la información de metadatos de cuePoint. Para más
información sobre el trazado de cuepoints, consulte “Trazado de cuepoints de un archivo
FLV” en la página 649.
El motivo de este fallo es una limitación del sistema operativo, no de Flash ni de Flash
N OT A
Player
Para que un archivo FLV se reproduzca en una unidad que no sea del sistema en Macintosh,
haga referencia a ella con una ruta absoluta mediante la notación de dos puntos (:) en lugar de
la basada en barras (/). La lista siguiente muestra la diferencia de los dos tipos de notación:
Notación basada en barras miUnidad/miCarpeta/miFLV.flv
Notación basada en dos puntos (Macintosh)miUnidad:miCarpeta:miFLV.flv
También puede crear un archivo de proyecto para un CD-ROM que va a utilizar para la
reproducción en Macintosh. Para obtener la información más actualizada sobre CD-ROM y
archivos FLV de Macintosh, consulte www.macromedia.com/go/3121b301.
Para crear una barra de progreso para cargar los archivos de imagen o SWF:
1. Cree un nuevo documento de Flash denominado loadImage.fla.
2. Seleccione Modificar > Documento e introduzca 700 en el cuadro de texto de anchura y
500 en el cuadro de texto de altura para cambiar las dimensiones del documento.
3. Seleccione el fotograma 1 de la línea de tiempo y escriba el siguiente código en el panel
Acciones:
//crear clips para incluir el contenido
this.createEmptyMovieClip("progressBar_mc", 0);
progressBar_mc.createEmptyMovieClip("bar_mc", 1);
progressBar_mc.createEmptyMovieClip("stroke_mc", 2);
//utilizar métodos de dibujo para crear una barra de progreso
with (progressBar_mc.stroke_mc) {
lineStyle(0, 0x000000);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 10);
lineTo(0, 10);
lineTo(0, 0);
}
with (progressBar_mc.bar_mc) {
beginFill(0xFF0000, 100);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 10);
lineTo(0, 10);
lineTo(0, 0);
endFill();
_xscale = 0;
}
progressBar_mc._x = 2;
progressBar_mc._y = 2;
// cargar progreso
4. Seleccione Control > Probar película para ver la carga de imagen y observar la barra de
progreso.
Si prueba este código una segunda vez, la imagen se almacenará en caché y la barra
N OT A
de progreso finalizará al instante. Para probar varias veces, utilice distintas imágenes
y cárguelas desde una fuente externa. Una fuente local podría causar problemas al
probar la aplicación porque el contenido se carga demasiado rápido.
Puede encontrar un archivo de origen de muestra que utiliza animación con scripts para crear
una animación de la barra de progreso. Busque tweenProgress.fla en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Tween ProgressBar.
pb._x = 100;
pb._y = 100;
var my_interval:Number;
var my_sound:Sound = new Sound();
my_sound.onLoad = function(success:Boolean) {
if (success) {
trace("sound loaded");
}
};
my_sound.onSoundComplete = function() {
clearInterval(my_interval);
trace("Cleared interval");
}
my_sound.loadSound("http://www.helpexamples.com/flash/sound/song2.mp3",
true);
my_interval = setInterval(updateProgressBar, 100, my_sound);
function updateProgressBar(the_sound:Sound):Void {
var pos:Number = Math.round(the_sound.position / the_sound.duration *
100);
pb.bar_mc._xscale = pos;
pb.vBar_mc._x = pb.bar_mc._width;
pb.pos_txt.text = pos + "%";
}
Si prueba este código una segunda vez, la imagen se almacenará en caché y la barra
NO T A
de progreso finalizará al instante. Para probar varias veces, utilice distintas imágenes
y cárguelas desde una fuente externa. Una fuente local podría causar problemas al
probar la aplicación porque el contenido se carga demasiado rápido.
Para más información sobre el uso de sonido, consulte la entrada de clase Sound, Sound, en
Referencia del lenguaje ActionScript 2.0.
Puede encontrar un archivo de origen de muestra que utiliza animación con scripts para crear
una animación de la barra de progreso. Busque tweenProgress.fla en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Tween ProgressBar.
También encontrará un archivo de origen de muestra que carga archivos MP3, jukebox.fla, en
la carpeta Samples del disco duro. Este ejemplo muestra cómo crear un jukebox mediante el
uso de tipos de datos, principios generales de programación y varios componentes.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\Components\Jukebox.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/Components/Jukebox.
la caché del disco duro (al probar ya este ejemplo o al cargarlo mediante otro
procedimiento). Si ocurre esto, cargue un archivo FLV en el servidor y cárguelo en
su lugar.
Puede encontrar un archivo de origen de muestra que utiliza animación con scripts para crear
una animación de la barra de progreso. Busque tweenProgress.fla en la carpeta Samples del
disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Tween ProgressBar.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Tween ProgressBar.
671
Envío y carga de variables
Un archivo SWF es una ventana que permite capturar y mostrar información, del mismo
modo que en una página HTML. Sin embargo, los archivos SWF pueden permanecer
cargados en el navegador y actualizarse continuamente con nueva información sin necesidad
de volver a cargar toda la página. Las funciones y los métodos de ActionScript permiten enviar
y recibir información de scripts de servidor, así como recibir información de archivos de texto
y archivos XML.
Además, los scripts de servidor pueden solicitar información específica de una base de datos y
enviarla a un archivo SWF. Los scripts de servidor pueden estar escritos en lenguajes
diferentes: algunos de los más comunes son CFML, Perl, ASP (Páginas de Active Server de
Microsoft, Microsoft Active Server Pages) y PHP. El hecho de almacenar información en una
base de datos para después recuperarla permite crear contenido dinámico y personalizado para
el archivo SWF. Por ejemplo, puede crear un tablero de mensajes, perfiles personales de los
usuarios o una cesta de la compra que efectúe un seguimiento de las compras de un usuario.
Existen varias funciones y métodos de ActionScript que permiten pasar información hacia y
desde un archivo SWF. Cada función y método utiliza un protocolo para transferir
información y requiere que la información tenga un formato específico.
■ Las funciones y los métodos MovieClip que utilizan el protocolo HTTP o HTTPS para
enviar información en formato URL codificado son getURL(), loadVariables(),
loadVariablesNum(), loadMovie() y loadMovieNum().
■ Los métodos LoadVars que utilizan el protocolo HTTP o HTTPS para enviar y cargar
información en formato URL codificado son load(), send() y sendAndLoad().
■ Los métodos que utilizan el protocolo HTTP o HTTPS para enviar y cargar información
como XML son XML.send(), XML.load() y XML.sendAndLoad().
■ Los métodos que crean y utilizan una conexión de socket TCP/IP para enviar y cargar
información como XML son XMLSocket.connect() y XMLSocket.send().
Para más información, consulte los siguientes temas:
■ “Comprobación de los datos cargados” en la página 673
■ “Creación de una barra de progreso para mostrar el progreso de la carga de datos” en
la página 674
Si hubiera utilizado el siguiente código, no podría realizar el seguimiento de los datos que se
están cargando:
loadVariables("myData.txt", 0);
trace(lastSiteVisited); // undefined
Cada función o método tiene una técnica específica que puede utilizarse para comprobar los
datos que han cargado. Si utiliza loadVariables function o loadMovie function, puede cargar
información en un clip de película de destino y utilizar el controlador onData para ejecutar un
script. Si utiliza loadVariables function para cargar los datos, el controlador onData se
ejecutará al cargarse la última variable. Si usa loadMovie function para cargar los datos, el
controlador onData se ejecutará cada vez que se envíe un fragmento del archivo SWF a Flash
Player.
Por ejemplo, el siguiente código de ActionScript carga las variables del archivo myData.txt en
el clip de película loadTarget_mc. Un controlador onData() asignado a la instancia
loadTarget_mc utiliza la variable lastSiteVisited, que se carga desde el archivo
myData.txt. Las siguientes acciones de trazado sólo aparecen cuando se han cargado todas las
variables, incluida lastSiteVisited:
this.createEmptyMovieClip("loadTarget_mc", this.getNextHighestDepth());
this.loadTarget_mc.onData = function() {
trace("Data Loaded");
trace(this.lastSiteVisited);
};
loadVariables("myData.txt", this.loadTarget_mc);
Si el archivo XML remoto se carga demasiado rápido para poder ver el efecto de la
SUGERENCIA
this.createEmptyMovieClip("pBar_mc", 9999);
var bar:MovieClip = pBar_mc.createEmptyMovieClip("bar_mc", 10);
bar.beginFill(0xFF0000, 100);
bar.moveTo(0, 0);
bar.lineTo(barWidth, 0);
bar.lineTo(barWidth, barHeight);
bar.lineTo(0, barHeight);
bar.lineTo(0, 0);
bar.endFill();
bar._xscale = 0;
pBar_mc.onEnterFrame = function() {
var pctLoaded:Number = Math.floor(my_xml.getBytesLoaded() /
my_xml.getBytesTotal() * 100);
if (!isNaN(pctLoaded)) {
pBar_mc.bar_mc._xscale = pctLoaded;
pBar_mc.label_txt.text = pctLoaded + "% loaded";
if (pctLoaded >= 100) {
pBar_mc.onEnterFrame = undefined;
}
}
};
Este ejemplo carga las variables del script ColdFusion llamado high_score.cfm en la instancia
del clip de película scoreClip mediante el método HTTP GET.
Cualquiera de las variables cargadas con la función loadVariables() debe tener el formato
MIME estándar application/x-www-form-urlencoded (formato estándar que se utiliza en los
scripts CFM y CGI). El archivo que especifique en el parámetro URL de la función
loadVariables() debe escribir los pares de variable y valor en este formato para que Flash
pueda leerlos. Este archivo puede especificar cualquier número de variables; los pares de
variable y valor se deben separar con un ampersand (&) y las palabras dentro de un valor deben
hacerlo con un signo más (+). Por ejemplo, la siguiente frase define varias variables:
highScore1=54000&playerName1=RGoulet&highScore2=53455&playerName2=
WNewton&highScore3=42885&playerName3=TJones
Es posible que tenga que codificar como URL determinados caracteres, como el signo
N OT A
Utilización del protocolo HTTP para conectar con scripts de servidor 677
Utilización de la clase LoadVars
Si está publicando en Flash Player 6 o posterior y desea una mayor flexibilidad de la que ofrece
loadVariables(), puede utilizar la clase LoadVars para transferir variables entre un archivo
SWF y un servidor.
La clase LoadVars se introdujo en Flash Player 6 para proporcionar una interfaz más limpia y
orientada a objetos para tarea común de intercambiar datos CGI con un servidor Web. Entre
las ventajas que ofrece la clase LoadVars, figuran las siguientes:
■ No es necesario que cree clips de película de contenedor para dar cabida a datos o ordenar
clips de película con variables específicas para la comunicación cliente/servidor.
■ La interfaz de clase es similar a la del objeto XML, lo que proporciona cierta coherencia en
ActionScript. Utiliza los métodos load(), send() y sendAndLoad() para iniciar la
comunicación con un servidor. La principal diferencia entre las clases LoadVars y XML
consiste en que los datos de LoadVars son una propiedad del objeto LoadVars, en lugar de
serlo de un árbol XML DOM (Modelo de Objetos de Documento, Document Object
Model) almacenado en el objeto XML.
■ La interfaz de clase es más simple (ya que incluye métodos denominados load, send,
sendAndLoad, que la antigua interfaz loadVariables.
■ Puede obtener información adicional sobre la comunicación a través de los métodos
getBytesLoaded y getBytesTotal.
■ Puede obtener información sobre el progreso de la descarga de datos (aunque no puede
acceder a los datos hasta que se han descargado completamente).
■ La interfaz de callback se logra a través de métodos de ActionScript (onLoad) en lugar de
a través del enfoque ya obsoleto y desfasado onClipEvent (data) que exigía loadVariables.
■ Se producen notificaciones de errores.
■ Puede añadir encabezados de solicitudes HTTP personalizadas.
Para llamar a los métodos del objeto LoadVars, debe crearlo primero. Este objeto es un
contenedor que almacena los datos cargados.
El siguiente procedimiento muestra cómo utilizar ColdFusion y la clase LoadVars para enviar
un mensaje de correo electrónico desde un archivo SWF.
Debe tener ColdFusion instalado en su servidor Web para realizar este ejemplo.
NO T A
dominio.
Utilización del protocolo HTTP para conectar con scripts de servidor 679
9. Guarde el documento como sendEmail.fla y seleccione Archivo > Publicar para publicarlo.
10. Cargue sendEmail.swf en el mismo directorio en el que se encuentra email.cfm (el archivo
de ColdFusion guardado y cargado en el paso 2).
11. Vea y compruebe el archivo SWF en un navegador.
Para más información, consulte la entrada LoadVars de Referencia del lenguaje ActionScript 2.0.
Flash Player 8 introdujo el controlador de eventos onHTTPStatus para las clases LoadVars,
XML y MovieClipLoader a fin de que los usuarios puedan acceder al código de estado desde
una solicitud HTTP. Esto permite a los desarrolladores determinar por qué no se ha podido
realizar una operación de carga específica, en lugar de determinar únicamente que dicha
operación ha fallado.
En el siguiente ejemplo se muestra cómo puede utilizar el controlador de eventos
onHTTPStatus de la clase LoadVars para comprobar si un archivo de texto se ha descargado
correctamente desde el servidor y cuál fue el código de estado devuelto desde la solicitud
HTTP.
Utilización del protocolo HTTP para conectar con scripts de servidor 681
Carga y descarga de archivos
La clase FileReference permite añadir la capacidad de carga y descarga de archivos entre un cliente y
un servidor. Los usuarios pueden cargar o descargar archivos entre sus equipos y un servidor.
Mediante un cuadro de diálogo (como el cuadro de diálogo Abrir del sistema operativo Windows),
se solicita a los usuarios que seleccionen un archivo para cargar o una ubicación para la descarga.
Todos los objetos FileReference que se crean con ActionScript hacen referencia a un único
archivo en el disco duro del usuario. Estos objetos tienen propiedades que contienen
información sobre el tamaño, tipo, nombre, fecha de creación y fecha de modificación del
archivo. En Macintosh, también existe una propiedad para el tipo de creador del archivo.
Puede crear una instancia de la clase FileReference de dos formas distintas. Puede utilizar el
siguiente operador new:
import flash.net.FileReference;
var myFileReference:FileReference = new FileReference();
Para ver un ejemplo de una aplicación que utiliza la API FileReference, consulte “Adición de
funcionalidad de carga de archivos a una aplicación” en la página 684.
9. Haga clic con el botón derecho del ratón en el símbolo en la Biblioteca y seleccione
Vinculación del menú contextual.
10. Seleccione las casillas de verificación Exportar para ActionScript y Exportar en primer
fotograma y escriba Mensaje en el cuadro de texto Identificador. Haga clic en Aceptar.
11. Añada el código ActionScript siguiente al fotograma 1 de la línea de tiempo:
import flash.net.FileReference;
imagePane.setSize(400, 350);
imagePane.move(75, 25);
uploadBtn.move(75, 390);
uploadBtn.label = "Upload Image";
imageLbl.move(75, 430);
imageLbl.text = "Select Image";
statusLbl.move(210, 390);
statusLbl.text = "Status";
imagesCb.move(75, 450);
statusArea.setSize(250, 100);
statusArea.move(210, 410);
imagePane.addEventListener("complete", imageDownloaded);
imagesCb.addEventListener("change", downloadImage);
uploadBtn.addEventListener("click", uploadImage);
En primer lugar, este código ActionScript importa la clase FileReference e inicializa, coloca
y cambia el tamaño de los componentes en el escenario. A continuación, se define un
objeto detector y tres controladores de eventos: onSelect, onOpen y onComplete.
Después, se añade el objeto detector a un nuevo objeto FileReference denominado
imageFile. A continuación, se añaden detectores de eventos a las instancias imagePane
de ScrollPane, imagesCb de ComboBox y uploadBtn de Button. Cada una de las
funciones de detector de eventos se define en el código que se muestra a continuación de
esta sección de código.
La primera función, imageDownloaded(), comprueba si la cantidad de bytes totales de las
imágenes descargadas es -1 y, en ese caso, establece la propiedad contentPath para la
instancia de ScrollPane en el clip de película con el identificador de vinculación de
Mensaje, que se creó en un paso anterior. La segunda función, downloadImage(), intenta
descargar la imagen que se ha cargado recientemente en la instancia de ScrollPane. Una
vez descargada la imagen, se activa la función imageDownloaded() definida
anteriormente, que comprueba si se ha descargado la imagen correctamente. La última
función, uploadImage(), abre un cuadro de diálogo para buscar archivos, que filtra todas
las imágenes JPEG, GIF y PNG.
12. Guarde los cambios en el documento.
13. Seleccione Archivo > Configuración de publicación, elija la ficha Formatos y asegúrese de
que Flash y HTML estén seleccionados.
14. (Opcional) En el cuadro de diálogo Configuración de publicación, seleccione la ficha Formatos
y elija Acceder sólo a la red en el menú emergente Seguridad de reproducción local.
Si completa este paso, no encontrará restricciones de seguridad al probar el documento en
un navegador local.
Este código PHP define, en primer lugar, dos variables de tipo Constant:
$MAXIMUM_FILESIZE y $MAXIMUM_FILE_COUNT. Estas variables determinan el tamaño
máximo (en kilobytes) de la imagen que se carga en el servidor (200 KB), así como el
número de archivos cargados recientemente que se pueden mantener en la carpeta
Imágenes (10). Si el tamaño de archivo de la imagen que se está cargando es inferior o
igual al valor de $MAXIMUM_FILESIZE, la imagen se mueve a la carpeta Temporal.
A continuación, se comprueba el tipo de archivo cargado para asegurarse de que la imagen
está en formato JPEG, GIF o PNG. Si es un tipo de imagen compatible, se copia de la
carpeta Temporal a la carpeta Imágenes. Si el archivo cargado no era un tipo de imagen
permitido se eliminará del sistema de archivos.
Después, se crea una lista de directorio de la carpeta Imágenes y se reproduce
indefinidamente mediante un bucle while. Cada archivo en la carpeta Imágenes se añade a
una matriz y, a continuación, se ordena. Si el número actual de archivos en la carpeta
Imágenes es superior al valor de $MAXIMUM_FILE_COUNT, se eliminarán archivos hasta que
sólo quede un número de imágenes igual al valor de $MAXIMUM_FILE_COUNT. De este
modo, se evita que la carpeta Imágenes aumente hasta un tamaño que no se pueda
manejar, ya que sólo puede haber 10 imágenes a la vez en la carpeta y cada imagen debe
tener un tamaño máximo de 200 KB (aproximadamente 2 MB de imágenes como
máximo).
3. Guarde los cambios en el documento PHP.
4. Cargue los archivos SWF, HTML y PHP en el servidor Web.
5. Vea el documento HTML remoto en un navegador Web y haga clic en el botón para cargar
imagen en el archivo SWF.
Lenguaje XML
XML (Lenguaje extensible de marcado, Extensible Markup Language) se está convirtiendo en el
estándar para el intercambio de datos estructurados en aplicaciones de Internet. Puede
integrar datos en Flash con servidores que utilizan tecnología XML para crear aplicaciones
complejas, como las aplicaciones de chat o los sistemas de cotización de valores.
En XML, al igual que en HTML, se utilizan etiquetas para especificar o marcar un cuerpo de
texto. En HTML se utilizan etiquetas predefinidas para indicar cómo debe aparecer el texto en
un navegador Web (por ejemplo, la etiqueta <b> indica que el texto debe aparecer en negrita).
En XML, debe definir las etiquetas que identifican el tipo de una parte de datos (por ejemplo,
<password>VerySecret</password>). XML separa la estructura de la información del
modo en el que ésta se muestra, lo que permite que el mismo documento XML se pueda
utilizar y reutilizar en diferentes entornos.
Cada etiqueta XML se denomina nodo o elemento. Cada nodo tiene un tipo (1, que indica un
elemento XML o 3, que indica un nodo de texto) y los elementos también pueden tener
atributos. Un nodo anidado en otro nodo se denomina nodo secundario. La estructura
jerárquica de árbol de los nodos se llama XML DOM (parecida a JavaScript DOM, que es la
estructura de los elementos de un navegador Web).
Flujo y conversión de datos entre un archivo SWF, un script de servidor y una base de datos
La validación de la contraseña para el sistema de cotización de valores requiere dos scripts: una
función definida en el fotograma 1 y un script que crea y envía los objetos XML creados en el
documento.
El servidor recibe el XML, genera una respuesta XML y la envía al archivo SWF. Si se acepta la
contraseña, el servidor responde con el mensaje que se muestra a continuación:
<LOGINREPLY STATUS="OK" SESSION="4D968511" />
Este XML incluye un atributo session que contiene un ID de sesión exclusivo generado de
forma aleatoria que se utiliza en todas las comunicaciones entre el cliente y el servidor durante
el resto de la sesión. Si se rechaza la contraseña, el servidor responde con el mensaje que se
muestra a continuación:
<LOGINREPLY STATUS="FAILURE" />
El nodo XML loginreply debe cargarse en un objeto XML vacío en el archivo SWF.
La sentencia siguiente crea el objeto XML loginreplyXML para recibir el nodo XML:
// Construir un objeto XML para albergar la respuesta del servidor
var loginReplyXML:XML = new XML();
loginReplyXML.onLoad = function(success:Boolean) {
La segunda sentencia de este código ActionScript define una función anónima (en línea), a la
que se llama cuando se activa el evento onLoad.
El botón login (instancia de login_btn) se utiliza para enviar el nombre de usuario y la
contraseña como XML al servidor y cargar una respuesta XML en el archivo SWF. Puede
hacerlo utilizando el método sendAndLoad(), como se muestra en el siguiente ejemplo:
loginXML.sendAndLoad("http://www.flash-mx.com.com/mm/main.cfm",
loginReplyXML);
Para más información, consulte Integración de XML y Flash en una aplicación Web en la
dirección www.macromedia.com/support/flash/interactivity/xml/ y la entrada XML en
Referencia del lenguaje ActionScript 2.0. Para más información sobre la seguridad de archivos
locales, consulte “Seguridad de archivos local y Flash Player” en la página 717.
Encontrará un archivo de origen de muestra, login.fla, en la carpeta Samples del disco duro.
Este ejemplo muestra cómo añadir funcionalidad sencilla de inicio de sesión a los sitios Web
con ActionScript 2.0. El ejemplo utiliza ActionScript y componentes para crear un pequeño
formulario en el que se introducen un nombre de usuario y una contraseña y, a continuación,
se hace clic en un botón para entrar en un sitio.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\Login.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/Login.
En el código anterior se define un nuevo objeto XML con el nombre de variable my_xml,
se definen dos controladores de eventos (onHTTPStatus y onLoad) y se carga un archivo
XML externo. El controlador de eventos onLoad comprueba si el archivo XML se cargó
correctamente y, en ese caso, envía un mensaje al panel Salida. También realiza un
seguimiento de la propiedad de estado del objeto XML. Se debe recordar que el detector
de eventos onHTTPStatus devuelve el código de estado devuelto desde el servidor Web,
mientras que la propiedad XML.status contiene un valor numérico que indica si el objeto
XML se ha podido analizar correctamente.
Player 8.
Existen varios archivos de ejemplo en el disco duro que cargan XML en un archivo SWF
durante la ejecución. Un ejemplo muestra cómo crear un rastreador de registros Web
mediante la carga, el análisis y la manipulación de datos XML. Encontrará el archivo de origen
de muestra, xml_blogTracker.fla, en la carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_BlogTracker.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/XML_BlogTracker.
Un segundo ejemplo muestra cómo utilizar XML y las matrices anidadas a fin de seleccionar
cadenas en diferentes idiomas para llenar campos de texto. El archivo de origen de muestra,
xml_languagePicker.fla, se puede encontrar en la carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\XML_LanguagePicker.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/XML_LanguagePicker.
Un tercer ejemplo muestra cómo crear un menú dinámico con datos XML. El ejemplo llama
al constructor XmlMenu() de ActionScript y le pasa dos parámetros: la ruta al archivo de menú
XML y una referencia a la línea de tiempo actual. El resto de la funcionalidad reside en un
archivo de clase personalizado, XmlMenu.as.
Puede utilizar los métodos connect() y send() de la clase XMLSocket para transferir XML
desde y hacia un servidor a través de una conexión de socket. El método connect() establece
una conexión de socket con un puerto de servidor Web. El método send() pasa un objeto
XML al servidor especificado en la conexión de socket.
Cuando se invoca el método connect(), Flash Player abre una conexión TCP/IP con el
servidor y la mantiene abierta hasta que se produce uno de los siguientes eventos:
■ Se llama al método close() de la clase XMLSocket.
■ No existen más referencias al objeto XMLSocket.
■ Se sale de Flash Player.
■ Se interrumpe la conexión (por ejemplo, se desconecta el módem).
Para más información, consulte la entrada MLSocket de Referencia del lenguaje ActionScript
2.0.
Para más información sobre la seguridad de archivos locales, consulte “Seguridad de archivos
local y Flash Player” en la página 717.
página HTML o una aplicación de contenedor. La API externa ofrece una funcionalidad
más sólida que fscommand() en esta situación. Para más información, consulte “Interfaz
API externa” en la página 704.
Utilice la función fscommand() para enviar un mensaje al programa que aloja Flash Player,
como un navegador Web, por ejemplo.
La tabla siguiente muestra los valores que puede especificar para los parámetros command y
arguments de fscommand() a fin de controlar la reproducción y el aspecto de un archivo
SWF que se ejecuta en el reproductor independiente, incluidos los proyectores.
8. En el archivo HTML, añada el siguiente código JavaScript donde pone // Place your
code here.:
if (command == "alert") {
alert(args);
} else if (command == "popup") {
window.open(args, "mmwin", "width=500,height=300");
}
Esta función sustituye a la antigua fscommand() para interoperar con una página HTML o
una aplicación de contenedor. La API externa ofrece una funcionalidad más sólida que
fscommand() en esta situación. Para más información, consulte “Interfaz API externa” en
la página 704.
send_button.addEventListener("click", clickListener);
function clickListener(eventObj:Object):Void {
trace("click > " + out_ti.text);
ExternalInterface.call("jsFunc", out_ti.text);
}
function makeCall(str) {
thisMovie("extint").asFunc(str);
}
function jsFunc(str) {
document.inForm.inField.value = "AS > Hello " + str;
}
// -->
</script>
Este código JavaScript define tres métodos. El primer método devuelve una referencia a un
archivo SWF incorporado en función de cuál sea el navegador del usuario: Microsoft
Internet Explorer (IE) o Mozilla. La segunda función, makeCall(), llama al método
asFunc() que se definió en el documento de Flash en el ejemplo anterior. El parámetro
"extint" de la llamada de función thisMovie() se refiere al ID de objeto y al nombre
embed del archivo SWF incorporado. Si ha guardado el documento de Flash con un
nombre diferente, deberá cambiar esta cadena para que coincida con los valores de las
etiquetas object y embed. La tercera función, jsFunc(), establece el valor del campo de
texto inField en el documento HTML. La llamada a esta función se realiza desde el
documento de Flash cuando un usuario hace clic en el componente Button send_button.
Este código crea dos formularios HTML similares a los creados en el entorno de Flash en
el ejercicio anterior. El primer formulario envía el valor del campo de texto outField a la
función makeCall() de JavaScript definida en un paso anterior. El segundo formulario se
utiliza para mostrar un valor que se envía desde el archivo SWF cuando el usuario hace clic
en la instancia send_button.
5. Guarde el documento HTML y cargue los archivos HTML y SWF en un servidor Web.
6. Visualice el archivo HTML en un navegador Web, introduzca una cadena en la instancia
out_ti de TextInput y haga clic en el botón Enviar.
Flash llama a la función jsFunc() de JavaScript y pasa el contenido del campo de texto
out_ti, que muestra el contenido del campo de texto de entrada inForm inField del
formulario HTML.
7. Escriba un valor en el campo de texto HTML outField y haga clic en el botón Enviar.
Flash llama a la función asFunc(), que muestra la cadena de la instancia in_ti de
TextInput.
Encontrará el archivo de origen de muestra, ExtInt.fla, en la carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\ExternalAPI\simple example.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/ExternalAPI/simple example.
Para ver un ejemplo más complejo en el que se utiliza la API externa, consulte “Control de
Flash Video con la API externa” en la página 709. Para más información sobre la seguridad de
archivos locales, consulte “Seguridad de archivos local y Flash Player” en la página 717.
Evite utilizar otros métodos de acceso al objeto plug-in como, por ejemplo,
NO T A
function pauseResume():Void {
video_ns.pause();
}
La primera parte de este código ActionScript define dos funciones callback de
ExternalInterface: playVideo() y pauseResume(). Estas funciones se llaman desde
JavaScript en el siguiente procedimiento. La segunda parte del código crea un nuevo
objeto NetConnection y NetStream, que se utiliza con la instancia de vídeo para
reproducir dinámicamente archivos FLV.
El código del siguiente procedimiento define un controlador de eventos onStatus para el
objeto video_ns de NetStream. Cuando el objeto NetStream cambia su estado, Flash
emplea el método ExternalInterface.call() para activar la función personalizada,
updateStatus(). Las dos últimas funciones, playVideo() y pauseResume(), controlan
la reproducción de la instancia de vídeo en el escenario. Estas dos funciones se llaman
desde el código JavaScript escrito en el siguiente procedimiento.
8. Guarde el documento de Flash.
9. Seleccione Archivo > Configuración de publicación, elija la ficha Formatos y asegúrese de
que HTML y Flash estén seleccionados.
10. Haga clic en Publicar para publicar los archivos SWF y HTML en el disco duro.
Cuando haya terminado, continúe con el siguiente procedimiento para crear el
contenedor del archivo SWF.
Encontrará el archivo de origen de muestra, external.fla, en la carpeta Samples del disco duro.
■ En Windows, desplácese a unidad de inicio\Archivos de programa\Macromedia\Flash
8\Samples and Tutorials\Samples\ActionScript\ExternalAPI.
■ En Macintosh, desplácese a Disco duro de Macintosh/Applications/Macromedia Flash 8/
Samples and Tutorials/Samples/ActionScript/ExternalAPI.
En el siguiente procedimiento, se modifica el código HTML generado por Flash en el
procedimiento anterior. Este procedimiento crea el código JavaScript y HTML que se requiere
para que los archivos FLV se reproduzcan en el archivo SWF.
<script language="JavaScript">
// Utilizar una variable para hacer referencia al archivo SWF
incorporado.
var flashVideoPlayer;
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/
swflash.cab#version=8,0,0,0" width="320" height="240" id="videoPlayer"
align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="video.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="video.swf" quality="high" bgcolor="#ffffff" width="320"
height="240" name="videoPlayer" align="middle"
allowScriptAccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
<form name="videoForm">
Select a video:<br />
<select name="videos">
<option value="lights_long.flv">lights_long.flv</option>
<option value="clouds.flv">clouds.flv</option>
<option value="typing_long.flv">typing_long.flv</option>
<option value="water.flv">water.flv</option>
</select>
<input type="button" name="selectVideo" value="play"
onClick="callFlashPlayVideo();" />
<br /><br />
</body>
</html>
Evite utilizar otros métodos de acceso al objeto plug-in como, por ejemplo,
NO T A
Aspectos básicos de la
seguridad
17
En Macromedia Flash Basic 8 y Macromedia Flash Professional 8, puede utilizar ActionScript
para cargar datos de fuentes externas en un archivo SWF o enviar datos a un servidor. Al
cargar datos en un archivo SWF, es necesario entender y adaptarse al modelo de seguridad de
Flash 8. Cuando abra un archivo SWF en el disco duro, es posible que deba realizar
configuraciones específicas para probar el archivo de forma local.
Para obtener información sobre la seguridad de archivos local, consulte “Seguridad de archivos
local y Flash Player” en la página 717. Para obtener información sobre las diferencias entre el
modelo de seguridad de Flash Player 7 y Flash Player 8, consulte “Compatibilidad con
modelos de seguridad de Flash Player anteriores” en la página 716. Para obtener información
sobre cómo cargar y analizar datos desde un servidor, lea el Capítulo 16, “Trabajo con datos
externos”, en la página 671. Para más información sobre la seguridad, consulte
www.macromedia.com/devnet/security y www.macromedia.com/software/flashplayer/
security/.
Para más información sobre la seguridad en Flash 8, consulte los temas siguientes:
Compatibilidad con modelos de seguridad de Flash Player anteriores . . . . . . . . . 716
Seguridad de archivos local y Flash Player . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Dominios, seguridad entre dominios y archivos SWF . . . . . . . . . . . . . . . . . . . . . . . . 735
Archivos de política de servidor para permitir el acceso a los datos . . . . . . . . . . . . 743
Acceso de protocolo HTTP a HTTPS entre archivos SWF . . . . . . . . . . . . . . . . . . .749
715
Compatibilidad con modelos de
seguridad de Flash Player anteriores
Como resultado de los cambios de seguridad introducidos en Flash Player 7, el contenido que
se ejecuta de la forma esperada en Flash Player 6 o versiones anteriores podría no hacerlo de la
misma manera en las versiones posteriores de Flash Player. Por ejemplo, en Flash Player 6, un
archivo SWF que reside en www.macromedia.com podría leer datos de un servidor situado en
data.macromedia.com. Es decir, Flash Player 6 permitiría que un archivo SWF de un dominio
cargase datos de un dominio similar.
En Flash Player 7 y versiones posteriores, si un archivo SWF de la versión 6 (o anterior)
intenta cargar datos de un servidor que reside en otro dominio, y ese servidor no proporciona
un archivo de política que permita la lectura desde el dominio de dicho archivo SWF,
aparecerá el cuadro de diálogo Configuración de Macromedia Flash Player. El cuadro de
diálogo solicita al usuario que permita o deniegue el acceso a datos de varios dominios.
Si el usuario hace clic en Permitir, el archivo SWF puede acceder a los datos solicitados; si hace
clic en Denegar, el archivo SWF no podrá acceder a los datos solicitados.
Para impedir que aparezca este cuadro de diálogo, deberá crear un archivo de política de
seguridad en el servidor que proporciona los datos. Para más información, consulte “Permiso
de carga de datos de varios dominios” en la página 744.
Flash Player 7 y las versiones posteriores no permiten el acceso a varios dominios sin un
archivo de política de seguridad.
Flash Player 8 ha cambiado la forma de gestionar System.security.allowDomain. Un
archivo SWF de Flash 8 que llama a System.security.allowDomain con cualquier
argumento o cualquier otro archivo SWF que utilice el valor de comodín (*), sólo permitirá el
acceso a sí mismo. Ahora se admite un valor de comodín (*), por ejemplo:
System.security.allowDomain("*") y System.security.allowInsecureDomain("*").
Si un archivo SWF de la versión 7 o anterior llama a System.security.allowDomain o
System.security.allowInsecureDomain con un argumento que no sea un comodín (*),
afectará a todos los archivos SWF de la versión 7 o inferior al llamar al dominio del archivo
SWF, como se hizo en Flash Player 7. No obstante, este tipo de llamada no afecta a archivos
SWF de Flash Player 8 (o versiones posteriores) al llamar al dominio del archivo SWF. Este
procedimiento ayuda a reducir la separación de contenido antiguo en Flash Player.
Para más información, consulte “Dominios, seguridad entre dominios y archivos SWF” en
la página 735, allowDomain (método security.allowDomain) y allowInsecureDomain
(método security.allowInsecureDomain).
Las restricciones que se describen en esta sección no afectan a los archivos SWF que
N OT A
están en Internet.
Al crear un archivo FLA, puede indicar si se permite un archivo SWF para comunicarse con
una red o con un sistema de archivos local. En versiones anteriores de Flash Player, los
archivos SWF locales podían interactuar con otros archivos SWF y cargar datos desde
cualquier ubicación local o remota. En Flash Player 8, el archivo SWF no puede realizar
conexiones con el sistema de archivos local e Internet. Se trata de un cambio realizado en la
seguridad, de modo que un archivo SWF no puede leer archivos en el disco duro y enviar el
contenido de estos archivos a través de Internet.
Esta restricción de la seguridad afecta al contenido implementado localmente, ya sea
contenido antiguo (un archivo FLA creado en una versión anterior de Flash) o creado en Flash
8. Supongamos que implementa una aplicación Flash, con Flash MX 2004 o anterior, que se
ejecuta de forma local y también tiene acceso a Internet. En Flash Player 8, esta aplicación
solicita ahora al usuario que dé su permiso para que pueda comunicarse con Internet.
Al probar un archivo en el disco duro, es necesario realizar una serie de pasos para determinar
si el archivo está en un documento local de confianza o no. Si crea el archivo en el entorno de
edición de Flash (por ejemplo, al seleccionar Control > Probar película), el archivo es de
confianza porque se encuentra en un entorno de prueba.
En Flash Player 7 y versiones anteriores, los archivos SWF locales tenían permiso para leer de
un sistema de archivos local y la red (como Internet). En Flash Player 8, los archivos SWF
locales tienen los niveles de permiso siguientes:
Local de confianza
Los archivos SWF asignados al entorno limitado local de confianza pueden interactuar con el
resto de archivos SWF y cargar datos desde cualquier lugar (remoto o local).
Cuando se utiliza contenido antiguo en una versión más reciente del reproductor, y Flash
Player debe tomar una decisión sobre la aplicación de reglas más recientes, es posible que
aparezca uno de los siguientes cuadros de diálogo. Estos cuadros de diálogo piden permiso
antes de permitir que el contenido antiguo de Flash se comunique con otras ubicaciones de
Internet:
■ Es posible que aparezca un cuadro de diálogo para avisarle de que el contenido de Flash
que utiliza está intentando usar reglas de seguridad anteriores para acceder a información
de un sitio que no pertenece a su propio dominio y que dicha información podría
compartirse en dos sitios. Flash Player le pregunta si desea permitir o denegar este acceso.
Además de responder al cuadro de diálogo, puede utilizar el panel Parámetros de seguridad
global para especificar si Flash Player debería pedir siempre permiso, a través del cuadro de
diálogo, antes de permitir el acceso; denegar siempre el acceso, sin preguntar primero; o
bien permitir el acceso a otros sitios o dominios sin preguntar.
Haga clic en Configuración para acceder al panel Parámetros de seguridad global, donde
puede especificar que algunas aplicaciones Flash de su equipo se comuniquen con
Internet.
Para cambiar la configuración de seguridad u obtener más información sobre sus opciones,
consulte el panel Parámetros de seguridad global. Utilice este panel para restablecer los
parámetros de privacidad de Macromedia Flash Player:
■ Si selecciona Denegar siempre y, a continuación, confirma su selección, se denegará el
acceso a los sitios Web que intenten utilizar la cámara o el micrófono. No se le preguntará
de nuevo si un sitio Web puede utilizar la cámara o el micrófono. Esta acción se aplica
tanto a los sitios Web que ha visitado como a los que no.
■ Si selecciona Preguntar siempre y, a continuación, confirma su selección, los sitios Web que
intenten utilizar la cámara o el micrófono deberán pedir permiso. Esta acción se aplica
tanto a los sitios Web que ha visitado como a los que no.
Si anteriormente ha seleccionado Recordar en el panel Privacidad (consulte la siguiente figura)
para permitir o denegar de forma permanente el acceso a uno o más sitios Web, al seleccionar
Preguntar siempre o Denegar siempre se anulará la selección de la opción Recordar para todos
estos sitios Web. En otras palabras, la selección que efectúe aquí sustituirá a las selecciones
realizadas anteriormente en el panel Configuración de privacidad.
Las opciones seleccionadas por los usuarios en el panel Parámetros de seguridad global
N OT A
tienen prioridad sobre cualquier otra decisión tomada en el cuadro de diálogo emergente
de seguridad.
Si especifica el acceso a la red de un archivo local, también debe activar los permisos en
N O TA
los archivos SWF, HTML, de datos y de servidor a los que acceda el archivo SWF local.
Propiedad sandboxType
La propiedad System.security.sandboxType de Flash Player 8 devuelve el tipo de entorno
local de seguridad en el que opera el archivo SWF que realiza la llamada.
La propiedad sandboxType presenta uno de los cuatro valores siguientes:
remote El archivo SWF se aloja en Internet y opera bajo reglas de entorno local basadas en
dominio.
localTrusted El archivo SWF es un archivo local al que el usuario ha dado su confianza, ya
sea mediante el panel Parámetros de seguridad global del Administrador de configuración o
mediante un archivo de configuración FlashPlayerTrust. El archivo SWF puede leer tanto de
fuentes de datos locales como comunicarse con la red (como Internet).
localWithFile El archivo SWF es un archivo local para el que el usuario no ha dado su
confianza y no se ha publicado con una designación de acceso a la red. El archivo SWF puede
leer de fuentes de datos locales pero no puede comunicarse con la red (como Internet).
localWithNetwork El archivo SWF es un archivo local para el que el usuario no ha dado su
confianza y se ha publicado con la opción Acceder sólo a la red seleccionada en el cuadro de
diálogo Configuración de publicación (ficha Flash). El archivo SWF se puede comunicar con
la red pero no puede leer de fuentes de datos locales.
Estos archivos incluyen contenido antiguo que se reproduce en Flash Player 8. Si está
desarrollando contenido en Flash 8, o tiene contenido que entra dentro de una de las
siguientes categorías, usted (o sus usuarios) deberían registrar el archivo como de confianza.
Para obtener información sobre el registro de un archivo como de confianza, consulte
“Especificación de archivos de confianza a través del Administrador de configuración” en
la página 728. Para obtener información sobre la concesión de permisos para la reproducción
de archivos locales a través de archivos de configuración, consulte “Creación de archivos de
configuración para el desarrollo en Flash” en la página 730.
Los archivos SWF locales con sistema de archivos presentan las siguientes restricciones:
■ No se puede acceder a la red, lo que incluye lo siguiente:
■ Cargar otros archivos SWF desde la red (excepto mediante rutas UNC que no sean de
Internet)
■ Enviar peticiones HTTP
■ Realizar conexiones mediante XMLSocket, Flash Remoting o NetConnection
■ Llamar a getURL() excepto si se utiliza getURL("file:...") o
getURL("mailto:...")
archivos SWF locales con sistema de archivos que no sean de red. Sin embargo,
no pueden interactuar con archivos SWF locales con acceso a la red.
Los archivos SWF locales con sistema de archivos tienen acceso de lectura a archivos
conocidos del sistema de archivos local. Por ejemplo, puede utilizar XML.load() en un
archivo SWF local con sistema de archivos siempre que cargue del sistema de archivos
local y no de Internet.
■ Los archivos SWF locales con sistema de archivos no se pueden comunicar con páginas
HTML, lo que incluye lo siguiente:
■ Creación de scripts entrantes (como ExternalInterface API, ActiveX, LiveConnect y
XPConnect)
■ Creación de scripts salientes (como llamadas fscommand personalizadas y
getURL("javascript:..."))
www.macromedia.com www.macromedia.com
data.macromedia.com data.macromedia.com
65.57.83.12 65.57.83.12
www.macromedia.com data.macromedia.com
macromedia.com www.macromedia.com
www.macromedia.com macromedia.com
Flash Player 8 no permite que los archivos SWF locales se comuniquen con Internet sin una
configuración adecuada. Para obtener información sobre la configuración de un archivo de
configuración para probar contenido de forma local, consulte “Creación de archivos de
configuración para el desarrollo en Flash” en la página 730.
Para más información sobre seguridad, consulte www.macromedia.com/devnet/security/ y
www.macromedia.com/software/flashplayer/security/.
Se podría dar la situación en la que se carga un archivo SWF secundario desde un dominio
diferente al que llama. Podría ser aconsejable permitir el uso de scripts de ese archivo en el
archivo SWF principal, aunque no se sabrá el dominio final del que procederá el archivo SWF
secundario. Este caso puede ocurrir, por ejemplo, cuando se utilizan redirecciones de reparto
de carga o servidores de terceros. En esta situación, puede utilizar la propiedad
MovieClip._url como argumento de este método. Por ejemplo, si carga un archivo SWF en
my_mc, podrá llamar a System.security.allowDomain(my_mc._url). Si lo hace, debe
esperar a que el archivo SWF empiece a cargarse en my_mc, ya que la propiedad _url no
dispone aún de su valor final correcto. Para determinar si un archivo SWF secundario ha
comenzado a cargarse, utilice MovieClipLoader.onLoadStart.
También puede darse la situación contraria; es decir, podría crear un archivo SWF secundario
en el que quiera que su archivo principal use scripts, pero no conoce cuál será el dominio de su
archivo SWF principal (lo que significa que se trata de un archivo SWF que podría cargarse
por medio de varios dominios). En este caso, llame a
System.security.allowDomain(_parent._url) desde el archivo SWF secundario. No
tiene que esperar a que el archivo SWF principal se cargue porque se ha cargado antes de que
lo haga el archivo secundario.
Si el archivo SWF de Internet al que se accede se carga desde una dirección URL
NO T A
Las versiones que controlan el comportamiento de Flash Player son las versiones de archivo
SWF (versión publicada de un archivo SWF), no la versión del propio Flash Player. Por
ejemplo, cuando Flash Player 8 reproduce un archivo SWF publicado para la versión 7, Flash
Player presenta un comportamiento coherente con la versión 7. Esta práctica evita que las
actualizaciones del reproductor modifiquen el comportamiento de
System.security.allowDomain en los archivos SWF implementados.
Puesto que Flash Player 7 y las versiones posteriores implementan reglas de coincidencia de
dominio exacto en lugar de reglas de coincidencia de superdominio, es posible que tenga que
modificar los scripts existentes si quiere acceder a ellos desde archivos publicados en Flash
Player 7 u 8 (los archivos modificados se podrán publicar igualmente en Flash Player 6). Si ha
utilizado alguna sentencia LocalConnection.allowDomain() o
System.security.allowDomain() en sus archivos y ha especificado que se permita el acceso
a sitios de superdominio, deberá cambiar sus parámetros de modo que especifiquen dominios
exactos. En el siguiente ejemplo se muestran los cambios que podría ser necesario hacer si se
tiene el código de Flash Player 6:
También es posible que tenga que añadir sentencias como éstas a sus archivos si actualmente
no las está utilizando. Por ejemplo, si el archivo SWF está albergado en www.someSite.com y
desea permitir el acceso de un archivo SWF publicado en Flash Player 7 o versiones
posteriores en store.someSite.com, deberá añadir sentencias como las del siguiente ejemplo al
archivo que está en www.someSite.com (el archivo que está en www.someSite.com podrá
publicarse igualmente en Flash Player 6):
System.security.allowDomain("store.someSite.com");
my_lc.allowDomain = function(sendingDomain)
return(sendingDomain=="store.someSite.com");
}
Además, tenga en cuenta que si una aplicación Flash Player 6 que se ejecuta en Flash Player 7
intenta acceder a datos situados fuera de su dominio concreto, se aplicarán las reglas de
coincidencia de dominio de Flash Player 7 y versiones posteriores, y se pedirá al usuario que
conceda o deniegue el acceso.
En resumen, deberá modificar sus archivos añadiendo o cambiando sentencias allowDomain
si quiere publicar archivos en Flash Player 7 o versiones posteriores que cumplan las siguientes
condiciones:
■ Ha implementado la creación de scripts entre películas del archivo SWF
(consulte“Permiso de acceso a datos entre archivos SWF de varios dominios” en
la página 741).
■ El archivo SWF (de cualquier versión) llamado no está albergado en un sitio que utiliza un
protocolo seguro (HTTPS) o bien los archivos SWF que efectúan la llamada y que reciben
la llamada están albergados en sitios HTTPS. (Si sólo se utiliza con HTTPS el archivo
SWF llamado, consulte “Acceso de protocolo HTTP a HTTPS entre archivos SWF” en
la página 749.)
Supongamos ahora que data.swf define un método llamado getData() en su línea de tiempo
principal. De manera predeterminada, main.swf no puede llamar al método getData()
definido en data.swf después de que dicho archivo se haya cargado, dado que los dos archivos
SWF no residen en el mismo dominio. Por ejemplo, una vez que el archivo data.swf se haya
cargado, la llamada de método siguiente en el archivo main.swf no se podrá realizar:
// En macromedia.swf, una vez que el archivo data.swf se haya cargado:
target_mc.getData(); // Esta llamada de método no se podrá realizar
Sin embargo, es posible que el archivo data.swf permita acceder a archivos SWF que se
encuentren disponibles en www.macromedia.com mediante el uso del controlador
LocalConnection.allowDomain y del método System.security.allowDomain(), según el
tipo de acceso necesario. El código siguiente, añadido a data.swf, permite que un archivo SWF
que se encuentre disponible en www.macromedia.com pueda acceder a sus variables y
métodos:
// En data.swf
this._lockroot = true;
System.security.allowDomain("www.macromedia.com");
var my_lc:LocalConnection = new LocalConnection();
my_lc.allowDomain = function(sendingDomain:String):Boolean {
return (sendingDomain == "www.macromedia.com");
};
function getData():Void {
var timestamp:Date = new Date();
output_txt.text += "data.swf:" + timestamp.toString() + "\n\n";
}
output_txt.text = "**INIT**:\n\n";
Si el archivo SWF utiliza loadPolicyFile, los visitantes que dispongan de Flash Player 6
A TE N C I Ó N
Puede cargar varios archivos de política con ámbitos solapados mediante loadPolicyFile.
Para todas las solicitudes, Flash Player intenta consultar todos los archivos en cuyo ámbito se
incluya la ubicación de la solicitud. Aunque un archivo de política no conceda acceso a varios
dominios, esto no impedirá que otro archivo conceda acceso a los datos. Si todos los intentos
de acceso resultan infructuosos, Flash Player busca en la ubicación predeterminada del archivo
crossdomain.xml (en el directorio raíz). La solicitud fallará si no se encuentra ningún archivo
de política en la ubicación predeterminada.
Los permisos otorgados por el archivo de política de dicha ubicación se aplicarán a todo el
contenido del mismo nivel o de un nivel inferior de la jerarquía del servidor. Por consiguiente,
si intenta cargar los siguientes datos, observará que sólo puede cargar datos procedentes de
determinadas ubicaciones:
myLoadVars.load("http://foo.com/sub/dir/vars.txt"); // permitido
myLoadVars.load("http://foo.com/sub/dir/deep/vars2.txt"); // permitido
myLoadVars.load("http://foo.com/elsewhere/vars3.txt"); // no permitido
En este ejemplo, Flash Player intenta recuperar un archivo de política desde el host y el puerto
especificados. Podrá utilizar cualquier puerto si el archivo de política no está en el directorio
predeterminado (raíz); en caso contrario, el puerto se limita a 1024 y superiores (al igual que
en reproductores anteriores). Cuando se establece una conexión con el puerto especificado,
Flash Player envía <policy-file-request />, terminada por un byte nulo.
El servidor de socket XML puede estar configurado para proporcionar archivos de política de
las siguientes formas:
■ Para proporcionar archivos de política y conexiones de socket normales a través del mismo
puerto. El servidor esperaría a la <policy-file-request /> antes de transmitir un
archivo de política.
■ Para que proporcione archivos de política en un puerto distinto al de las conexiones
normales, en cuyo caso podría enviar un archivo de política en cuanto se establece una
conexión en el puerto del archivo de política dedicado.
El servidor debe enviar un byte nulo para terminar un archivo de política antes de que se cierre
la conexión. Si el servidor no cierra la conexión, Flash Player lo hace recibiendo el byte nulo
de terminación.
Un archivo de política proporcionado por un servidor de socket XML tiene la misma sintaxis
que cualquier otro archivo de política, pero debe especificar también los puertos a los que se
concede el acceso. Los puertos permitidos se especifican en el atributo to-ports de la etiqueta
<allow-access-from>. Si un archivo de política es inferior al puerto 1024, podrá conceder
acceso a cualquier puerto; cuando un archivo de política procede del puerto 1024 u otro
superior, sólo puede conceder acceso a otros puertos superiores a 1024. Se permiten números
de puerto individuales, rangos de puertos y comodines. El siguiente código es un ejemplo de
archivo de política XMLSocket:
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.foo.com" to-ports="507,516" />
<allow-access-from domain="*.bar.com" to-ports="516-523" />
<allow-access-from domain="www.foo.com" to-ports="507,516-523" />
<allow-access-from domain="www.bar.com" to-ports="*" />
</cross-domain-policy>
ofrecida por el protocolo HTTPS. Estos cambios sólo deben realizarse si no puede
reorganizar el sitio de manera que todos los archivos SWF se encuentren disponibles en
el protocolo HTTPS.
El código siguiente muestra un ejemplo de cambios que puede que tenga que realizar:
// Comandos en un archivo SWF de Flash Player 6 en https://www.someSite.com
// para permitir el acceso de los archivos SWF de Flash Player 7 albergados
// en http://www.someSite.com o en http://www.someOtherSite.com
System.security.allowDomain("someOtherSite.com");
my_lc.allowDomain = function(sendingDomain)
return(sendingDomain=="someOtherSite.com");
}
// Comandos correspondientes en un archivo SWF de Flash Player 7
// para permitir el acceso de los archivos SWF de Flash Player 7 albergados
// en http://www.someSite.com o en http://www.someOtherSite.com
System.security.allowInsecureDomain("www.someSite.com",
"www.someOtherSite.com");
my_lc.allowInsecureDomain = function(sendingDomain) {
return(sendingDomain=="www.someSite.com" ||
sendingDomain=="www.someOtherSite.com");
}
También es posible que tenga que añadir sentencias como éstas a sus archivos si actualmente
no las está utilizando. Es posible que deba hacerse una modificación aunque ambos archivos se
encuentren en el mismo dominio (por ejemplo, si un archivo en http://www.domain.com
llama a otro archivo en https://www.domain.com).
En resumen, es posible que tenga que modificar sus archivos añadiendo o cambiando
sentencias si quiere publicar archivos en Flash Player 7 o versiones posteriores que cumplan las
siguientes condiciones:
■ Ha implementado la creación de scripts entre películas entre archivos SWF (mediante
loadMovie(), MovieClip.loadMovie(), MovieClipLoader.LoadClip() u objetos
LocalConnection).
■ El archivo que efectúa la llamada no se alberga en un sitio con protocolo HTTPS, y el
archivo llamado sí utiliza HTTPS.
Depuración de aplicaciones
753
Depuración de los scripts
El depurador de Flash 8 ayuda a detectar errores en el archivo SWF mientras se ejecuta en
Flash Player. Debe visualizar el archivo SWF con una versión especial de Flash Player llamada
Reproductor de depuración de Flash. Cuando se instala la herramienta de edición, se instala
automáticamente Reproductor de depuración de Flash. Así pues, si instala Flash y explora un
sitio Web con contenido Flash o utiliza la opción Probar película, estará utilizando el
Reproductor de depuración de Flash. También puede ejecutar el instalador en el siguiente
directorio de Windows o Macintosh: Directorio de instalación de Flash\Players\Debug\
directorio o iniciar la aplicación Reproductor de depuración de Flash independiente desde el
mismo directorio.
Si utiliza el comando Control > Probar película para probar archivos SWF con controles de
teclado implementados (tabulación, métodos abreviados de teclado creados mediante
Key.addListener(), etc.), seleccione Control > Deshabilitar métodos abreviados de teclado.
Al seleccionar esta opción impedirá que el entorno de edición “capte” las pulsaciones de
teclado, permitiendo que lleguen hasta el reproductor. Por ejemplo, en el entorno de edición,
Ctrl+U abre el cuadro de diálogo Preferencias. Si el script asigna Ctrl+U a una acción que
subraya el texto en pantalla, cuando se utilice Probar película, al presionar Ctrl+U abrirá el
cuadro de diálogo Preferencias en lugar de ejecutar la acción de subrayar texto. Para permitir
que el comando Ctrl+U llegue hasta el reproductor, debe seleccionar Control > Deshabilitar
métodos abreviados de teclado.
comando Probar película dará un error si una parte cualquiera de la ruta del archivo SWF
incluye caracteres que no pueden representarse con el esquema de codificación MBCS.
Por ejemplo, las rutas japonesas no funcionan en un sistema inglés. Esta limitación se
aplica a todas las áreas de la aplicación que utilizan el reproductor externo.
El depurador muestra una lista jerárquica de clips de película cargados actualmente en Flash
Player. Con el depurador, puede ver y modificar los valores de variables y de propiedades
mientras se reproduce el archivo SWF; además, puede utilizar puntos de corte para detener el
archivo SWF y desplazarse por el código ActionScript línea a línea.
Puede utilizar el depurador en modo de prueba con archivos locales, o bien para probar
archivos de un servidor Web que se encuentren en una ubicación remota. El depurador
permite establecer puntos de corte en el código de ActionScript que detienen Flash Player y
desplazarse por el código a medida que se ejecuta. Después puede volver a editar los scripts de
modo que produzcan los resultados correctos.
Depurador. Cuando el puntero cambia entre cada región, puede arrastrarlo para
cambiar el tamaño de las listas de Visualización y Observación y de la vista de
código.
podido encontrar el archivo SWD. En tal caso, haga clic con el botón derecho del
ratón (Windows) o con la tecla Control presionada (Macintosh) en el archivo SWF
para ver el menú contextual y seleccione Depurador.
Depurador. Cuando el puntero cambia entre cada región, puede arrastrarlo para
cambiar el tamaño de las listas de Visualización y Observación y de la vista de
código.
Para escribir el valor de una expresión en el panel Salida en modo de prueba, utilice la
NO TA
Depurador. Cuando el puntero cambia entre cada región, puede arrastrarlo para cambiar
el tamaño de las listas de Visualización y Observación y de la vista de código.
Depurador. Cuando el puntero cambia entre cada región, puede arrastrarlo para cambiar
el tamaño de las listas de Visualización y Observación y de la vista de código.
Formato automático, puede que observe que algunos puntos de corte ya no están en la
posición correcta. Es posible que el código ActionScript se mueva a otra línea diferente
al aplicar formato al código, ya que algunas veces se eliminan líneas vacías. Puede que
deba comprobar y modificar los puntos de corte después de hacer clic en Formato
automático, o bien aplicar formato automático a los scripts antes de establecer los
puntos de corte.
archivos AS.
Al hacer clic en el botón, se alcanza el punto de corte y Flash Player efectúa una pausa. A
continuación, puede llevar el depurador a la primera línea de la función myFunction(), sin
importar en qué punto del documento está definida. También puede continuar hasta el final
de la función o salir de ésta.
A medida que se desplaza por las líneas de código, los valores de las variables y las propiedades
cambian en la lista Observación y en las fichas Variables, Locales y Propiedades. La flecha
amarilla en la parte izquierda de la vista de código del depurador indica la línea en la que se ha
detenido el depurador. Utilice los botones siguientes situados en la parte superior de la vista de
código:
Continuar
Detener depuración
Alternar punto de corte
Quitar todos los puntos de corte
Salir
Entrar
Pasar
Entrar hace que el depurador (indicado por la flecha amarilla) entre en una función. Entrar
sólo funciona para las funciones definidas por el usuario.
Los números de este fragmento de código indican números de línea. No forman parte
NO TA
del código.
Salir hace avanzar el depurador hasta salir de una función. Este botón sólo funciona si el
depurador está detenido en una función definida por el usuario; desplaza la flecha amarilla
hasta la línea posterior a la línea desde donde se llamó a la función. En el ejemplo anterior, si
coloca un punto de corte en la línea 3 y hace clic en Salir, el depurador pasa a la línea 8.
Cuando se hace clic en una línea que no se encuentra en una función definida por el usuario,
se produce el mismo resultado que cuando se hace clic en Continuar. Por ejemplo, si se
detiene en la línea 6 y hace clic en Salir, el reproductor continúa ejecutando el script hasta que
encuentra un punto de corte.
Pasar hace avanzar el depurador pasando una línea de código. Este botón mueve la flecha
amarilla a la siguiente línea del script. En el ejemplo anterior, si se detiene en la línea 7 y hace
clic en Pasar, avanzará directamente a la línea 8 sin pasar por myFunction(), aunque continúe
ejecutándose myFunction().
Continuar deja la línea en la que se ha detenido el reproductor y prosigue la reproducción
hasta llegar a un punto de corte.
Detener depuración desactiva el depurador, pero hace que el archivo SWF siga
reproduciéndose en Flash Player.
Buscar Abre un cuadro de diálogo que le permite buscar una palabra clave
o una frase en el contenido del panel Salida.
Buscar de nuevo Intenta localizar la siguiente instancia de una palabra clave o frase
en el contenido del panel Salida.
Guardar en archivo Guarda el contenido actual del panel Salida en un archivo de texto
externo.
Para más información sobre el panel Salida, consulte los siguientes temas:
■ “Lista de los objetos de un archivo SWF” en la página 770
■ “Lista de las variables de un archivo SWF” en la página 770
■ “Visualización de las propiedades de un campo de texto para la depuración” en
la página 772
■ “Utilización de la sentencia trace” en la página 772
■ “Actualización de Flash Player para realizar pruebas” en la página 773
La selección del comando Mostrar objetos borra toda la información que se muestra
A T E NC I ÓN
El comando Mostrar objetos no enumera todos los objetos de datos de ActionScript. En este
contexto, el objeto se considera como una forma o símbolo en el escenario.
La selección del comando Mostrar variables borra toda la información que se muestra
A T E NC I Ó N
El comando Mostrar objetos del menú Depurar (en modo de prueba) enumera los objetos
TextField. Si se especifica un nombre de instancia para un campo de texto, en el panel Salida
se mostrará la ruta de destino completa, incluido el nombre de instancia, con el formato
siguiente:
Target = "target path"
Para más información sobre el comando Mostrar variables o Mostrar objetos, consulte
“Utilización del panel Salida” en la página 768.
Recomendaciones y convenciones de
codificación para ActionScript 2.0 19
Los diseñadores y desarrolladores que utilicen Macromedia Flash deberán escribir código y
estructurar las aplicaciones de forma intuitiva y útil tanto para ellos como para otras personas
que trabajen en el mismo proyecto. Esto es especialmente importante en el caso de archivos
FLA con muchos activos o en archivos de código grandes. Cuando se siguen las
recomendaciones y convenciones de codificación, el equipo de diseño y desarrollo puede
comprender la estructura de archivos y el código ActionScript funciona de forma más eficaz.
Este documento ayuda a dar forma al proceso de desarrollo y codificación de Flash.
Dado que es habitual que más de un diseñador o desarrollador trabaje en un mismo proyecto
de Flash, los equipos resultan beneficiados cuando todos sus miembros siguen un conjunto
estándar de directrices para utilizar Flash, organizar archivos FLA y escribir código
ActionScript 2.0. En las secciones de este capítulo se describen las prácticas recomendadas
para escribir código ActionScript, mientras que en algunas secciones de Utilización de Flash se
abordan las recomendaciones para el uso de la herramienta de edición de Flash.
El seguimiento de estas directrices también contribuye a que las personas que estén
aprendiendo a utilizar Flash y a escribir código ActionScript logren una mayor coherencia.
Las prácticas recomendadas deben adoptarlas en todo momento los diseñadores,
desarrolladores o el personal que trabaje individualmente o como parte de un equipo.
■ Cuando trabaja con documentos de Flash o ActionScript
La adopción de unas prácticas coherentes y eficaces le ayudará a acelerar el flujo de trabajo.
Si se siguen las convenciones de codificación establecidas, el desarrollo es más rápido y
resulta más sencillo comprender y recordar la estructura del documento cuando es preciso
editarlo posteriormente. Además, el código suele ser más portable y más fácil de reutilizar
dentro del marco de un proyecto de mayor tamaño.
■ Cuando comparte archivos FLA o AS
Otras personas que editen el documento pueden encontrar y comprender rápidamente el
código ActionScript, modificar código de forma coherente, y encontrar y editar activos.
775
■ Cuando trabaja con aplicaciones
Varios autores pueden trabajar en una aplicación con menos conflictos y más eficacia. Si se
siguen las prácticas recomendadas y las convenciones de codificación, los administradores
de sitios o de proyectos podrán administrar y estructurar proyectos o aplicaciones
complejos con menos conflictos o redundancias.
■ Cuando aprende o enseña Flash y ActionScript
Aprender a crear aplicaciones utilizando las prácticas recomendadas y siguiendo las
convenciones de código reduce la necesidad de tener que aprender nuevamente
determinadas metodologías. Si los estudiantes que reciben formación de Flash utilizan
formas coherentes y mejores para estructurar el código, su aprendizaje del lenguaje puede
ser más rápido y menos frustrante.
El uso de técnicas coherentes y de las siguientes directrices sirve de ayuda a las personas que
reciben formación de Flash o a las que trabajan eficazmente en entornos de equipo. La
coherencia de los métodos permite que las personas que trabajan solas puedan recordar la
estructura de un documento, sobre todo si no han trabajado recientemente en el archivo FLA.
Éstas son sólo algunas de las razones para aprender y seguir las prácticas recomendadas. Hay
muchas otras razones que sin duda descubrirá cuando lea estas prácticas recomendadas y
desarrolle sus propios buenos hábitos. Considere los siguientes temas como directrices para
trabajar con Flash; puede seguir algunas de las recomendaciones o todas ellas. También puede
modificar las recomendaciones y adaptarlas a su forma de trabajar. Muchas de las directrices de
este capítulo le ayudarán a desarrollar una forma coherente de trabajar con Flash y escribir
código ActionScript.
En este capítulo se tratan los siguientes temas sobre convenciones de codificación y prácticas
recomendadas:
Convenciones de asignación de nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
Utilización de comentarios en el código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788
Convenciones de codificación de ActionScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .790
Optimización de ActionScript y Flash Player. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
Aplicación de formato a la sintaxis de ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . .808
No utilice nunca mayúsculas y minúsculas diferentes para evitar conflictos con las
A D VE R T E NC I A
palabras reservadas. Por ejemplo, la asignación del nombre textfield a una instancia de
la clase TextField (con la cual no entra en conflicto porque Flash distingue entre
mayúsculas y minúsculas) es una práctica de codificación poco recomendable.
En la siguiente tabla se enumeran las palabras clave reservadas de ActionScript 2.0 que
provocan errores en los scripts cuando se utilizan como nombres de variables:
gt if ifFrameLoaded implements
import in instanceof interface
intrinsic le it ne
while with
volatile
Siempre que sea posible, utilice strict data typing con las variables, pues le ayudará de las
siguientes formas:
■ Añade la funcionalidad de completar código, lo que permite acelerar la programación.
■ Genera errores en el panel Salida, por lo que no tendrá un error sin mensaje cuando
compile el archivo SWF. Estos errores le ayudan a encontrar y solucionar problemas en las
aplicaciones.
Para añadir un tipo de datos a las variables, debe definir la variable con la palabra clave var.
En el siguiente ejemplo, utilizaría strict data typing para crear un objeto LoadVars:
var paramsLv:LoadVars = new LoadVars();
■ Asigne a las variables nombres que empiecen por una letra minúscula.
Los nombres con iniciales en mayúsculas están reservados para clases, interfaces, etc.
■ Utilice una combinación de mayúsculas y minúsculas para las palabras concatenadas.
Por ejemplo, utilice myFont en lugar de myfont.
■ No utilice siglas ni abreviaturas.
La excepción a esta regla es el uso de acrónimos o abreviaturas que representen la forma
estándar de empleo de un término (como HTML o CFM). En el caso de siglas de uso
habitual, utilice una combinación de mayúsculas y minúsculas para lograr una mayor
legibilidad, como, por ejemplo, newHtmlParser en lugar de newHTMLParser.
■ Utilice pares complementarios para crear un conjunto relacionado de nombres de
variables.
Por ejemplo, puede utilizar pares complementarios para indicar la puntuación mínima y
máxima de un juego de la siguiente forma:
var minScoreNum:Number = 10; //puntuación mínima
var maxScoreNum:Number = 500; //puntuación máxima
No programe directamente las constantes numéricas, a menos que la constante sea 1, 0 o -1,
que es la constante que utilizaría en un bucle for como valor de contador.
O bien, para una variable que indique si un usuario ha iniciado una sesión o no la ha iniciado,
podría utilizar lo siguiente:
isLoggedIn
Una clase puede contener variables de miembros públicas y privadas. La clase puede contener
variables para las que no desee permitir el acceso o modificación por parte de los usuarios.
Convierta estas variables en privadas y permita a los usuarios acceder a los valores únicamente
mediante métodos de captador/definidor.
Siga estas directrices para asignar nombre a las clases:
■ Comience un nombre de clase con mayúscula.
■ Escriba los nombres de clase mezclando mayúsculas y minúsculas cuando se trate de una
palabra compuesta o concatenada.
Comience con mayúscula las palabras compuestas o concatenadas. Un ejemplo de ello es
NewMember.
■ Los nombres de clase suelen ser nombres o nombres adjetivados.
Un calificador describe el nombre o la frase. Por ejemplo, en lugar de utilizar simplemente
“member”, puede calificar el nombre mediante NewMember u OldMember.
Los comentarios de documentación se utilizan para describir las especificaciones del código,
no la implementación. Los comentarios de implementación se utilizan para convertir en
comentario parte del código o para comentar la implementación de determinadas secciones
del código. Los comentarios de documentación se delimitan con /** y */, y los comentarios de
implementación se delimitan con /* y */.
Los comentarios de documentación se utilizan para describir interfaces, clases, métodos y
constructores. Incluya un solo comentario de documentación por cada clase, interfaz o
miembro y colóquelo inmediatamente antes de la declaración. Si debe proporcionar más
información de la que cabe en los comentarios de documentación, utilice los comentarios de
implementación (con el formato de comentarios en bloque o comentarios de una sola línea).
No incluya comentarios que no estén directamente relacionados con la clase que se está
NO T A
Utilice comentarios de bloque, de una sola línea o finales en el cuerpo de la clase para
comentar el código ActionScript. Para más información sobre el uso de comentarios en clases
de clases, consulte “Adición de comentarios a clases” en la página 789.
Convenciones de codificación de
ActionScript
Uno de los aspectos más importantes de la programación es la coherencia, ya sea en los
esquemas de asignación de nombres de variables (descritos en “Convenciones de asignación de
nombre” en la página 777), en la aplicación de formato (descrita en “Aplicación de formato a
la sintaxis de ActionScript” en la página 808) o en los estándares de codificación y la
colocación del código ActionScript 2.0, que se describe en esta sección. La depuración y el
mantenimiento del código se simplifican enormemente si el código se organiza según unos
estándares.
Para más información sobre convenciones de codificación, consulte los siguientes temas:
■ “Mantenimiento del código ActionScript en un único lugar” en la página 791
■ “Asociación de código a los objetos” en la página 791
■ “Gestión del ámbito” en la página 793
■ “Estructuración de un archivo de clase” en la página 796
■ “Utilización de funciones” en la página 804
Sin embargo, colocar el código ActionScript equivalente en una línea de tiempo presenta este
aspecto:
// código correcto
myBtn.onRelease = function() {
// Realizar una acción.
};
objetos, por lo que deben aplicarse otras prácticas al utilizar estas funciones. Para más
información, consulte el Capítulo 3, “Recomendaciones para el uso de
comportamientos” en Utilización de Flash.
Todas las variables deben incluirse en un ámbito, excepto las variables que son parámetros de
función y variables locales. Siempre que sea posible, incluya en un ámbito las variables
relativas a su ruta actual, mediante el direccionamiento relativo como, por ejemplo, la
propiedad this. Para más información sobre la utilización de la propiedad this, consulte this
property en Referencia del lenguaje ActionScript 2.0.
Si en estas situaciones añade de forma coherente la palabra clave this, será mucho más
sencillo leer y entender el código ActionScript 2.0.
Para más información sobre clases, consulte el “Clases y ámbito” en la página 256. Para más
información sobre ámbitos, consulte “Gestión del ámbito” en la página 793.
Este ejemplo muestra una forma mejor que incluir ambas declaraciones en una sola línea.
Coloque estas declaraciones al principio de un bloque de código.
■ Inicialice las variables locales al declararlas.
Las propiedades de una clase sólo se deben inicializar en la declaración si el inicializador es
una constante en tiempo de compilación.
■ Declare las variables antes de utilizarlas por primera vez.
Aquí se incluyen también los bucles.
■ Evite utilizar declaraciones locales que oculten declaraciones de nivel superior.
Por ejemplo, no declare una variable dos veces, como se muestra en el siguiente ejemplo:
var counterNum:Number = 0;
function myMethod() {
for (var counterNum:Number = 0; counterNum<=4; counterNum++) {
// sentencias;
}
}
Este código declara la misma variable dentro de un bloque interno, algo que debe evitarse.
■ No asigne muchas variables a un único valor de una sentencia.
Siga esta convención, ya que, de lo contrario, el código resulta difícil de leer, como
muestra el siguiente código ActionScript:
playBtn.onRelease = playBtn.onRollOut = playsound;
o
class User {
private var m_username:String, m_password:String;
}
■ Haga el método o la propiedad públicos sólo si existe un motivo para ello. De lo contrario,
haga los métodos y propiedades privados.
Macromedia recomienda añadir la palabra clave this como prefijo, ya que puede facilitar
la legibilidad y ayudarle a escribir un código limpio al proporcionar contexto.
Elimine variables o convierta las variables en null cuando ya no las necesite. Si se establecen
las variables en null puede mejorarse el rendimiento. Este proceso suele denominarse en
inglés garbage collection (eliminación de datos innecesarios). Eliminar las variables ayuda a
optimizar el uso de la memoria en tiempo de ejecución, porque los activos no necesarios se
eliminan del archivo SWF. Es mejor eliminar variables que establecerlas en null. Para más
información sobre el rendimiento, consulte “Optimización del código” en la página 807.
Player.
Para más información sobre la asignación de nombres para las variables, consulte “Asignación
de nombre a variables” en la página 780. Para más información sobre la eliminación de
objetos, consulte delete statement en Referencia del lenguaje ActionScript 2.0.
El código siguiente podría ser la primera llamada de función en la aplicación y la única que
realizaría para llevar a cabo la inicialización. El fotograma 1 de un archivo FLA que carga
XML puede utilizar código similar al siguiente código ActionScript:
if (init == undefined) {
var prodXml:XML = new XML();
prodXml.ignoreWhite = true;
prodXml.onLoad = function(success:Boolean) {
if (success) {
trace("loaded");
} else {
trace("error loading XML");
}
};
prodXml.load("products.xml");
init = true;
}
El uso de una sentencia trace es una forma eficaz de depurar el código ActionScript 2.0.
Puede eliminar las sentencias trace al publicar un archivo SWF para mejorar levemente el
rendimiento de la reproducción. Antes de publicar un archivo SWF, abra Configuración de
publicación y seleccione Omitir acciones de trazado en la ficha Flash. Para más información
sobre la utilización de una función trace, consulte trace function en Referencia del lenguaje
ActionScript 2.0.
La herramienta de depurador también resulta útil para depurar código ActionScript. Para más
información, consulte el Capítulo 18, “Depuración de aplicaciones”.
Si olvidó poner la palabra clave super en el método getColor() de la clase Socks, el método
getColor() podría llamarse a sí mismo repetidamente, lo que provocaría que el script fallase
a causa de los problemas de recursión infinita. El panel Salida mostraría el siguiente error si no
ha utilizado la palabra clave super:
[Socks] I am getColor
[Socks] I am getColor
...
[Socks] I am getColor
256 levels of recursion were exceeded in one action list.
This is probably an infinite loop.
Further execution of actions has been disabled in this SWF file.
Utilización de funciones
Siempre que sea posible, reutilice los bloques de código. Una forma de reutilizar código es
llamar a una función varias veces, en lugar de crear código distinto cada vez. Las funciones
pueden ser fragmentos genéricos de código, por consiguiente, puede utilizar los mismos
bloques de código para fines ligeramente distintos en un archivo SWF. La reutilización del
código permite crear aplicaciones eficaces y reduce al mínimo la cantidad de código
ActionScript 2.0 que debe escribirse, por lo que el tiempo de desarrollo es menor. Puede crear
funciones en una línea de tiempo, en un archivo de clase o escribir código ActionScript que
resida en un componente basado en código y reutilizarlos de diferentes formas.
Si utiliza ActionScript 2.0, evite escribir funciones en una línea de tiempo. Al utilizar código
ActionScript 2.0, coloque las funciones en los archivos de clase siempre que sea posible, tal y
como se muestra en el siguiente ejemplo:
class Circle {
public function area(radius:Number):Number {
return (Math.PI*Math.pow(radius, 2));
}
public function perimeter(radius:Number):Number {
return (2 * Math.PI * radius);
}
public function diameter(radius:Number):Number {
return (radius * 2);
}
}
Para utilizar estas funciones, puede añadir el siguiente código ActionScript al archivo FLA:
import mx.site.Utils;
var randomMonth:Number = Utils.randomRange(0, 11);
var min:Number = Utils.arrayMin([3, 3, 5, 34, 2, 1, 1, -3]);
var max:Number = Utils.arrayMax([3, 3, 5, 34, 2, 1, 1, -3]);
trace("month: "+randomMonth);
trace("min: "+min);
trace("max: "+max);
De forma similar, limite el uso de setInterval y recuerde borrar el intervalo cuando termine
de utilizarlo para reducir los requisitos del procesador para el archivo SWF.
en lugar de:
var fontArr:Array = TextField.getFontList();
for (var i:Number = 0; i < fontArr.length; i++) {
trace(fontArr[i]);
}
o
printSize("size is " + foo + "\n");
■ Coloque cada sentencia en una línea independiente para aumentar la legibilidad del
código ActionScript.
Esto se muestra en el siguiente ejemplo de código ActionScript:
theNum++; // Correcto
theOtherNum++; // Correcto
aNum++; anOtherNum++; // Incorrecto
■ No incorpore asignaciones.
Las sentencias incorporadas se utilizan en ocasiones para mejorar el rendimiento de un
archivo SWF durante la ejecución, pero el código resulta más difícil de leer y depurar. Esto
se muestra en el siguiente ejemplo de código ActionScript (pero recuerde que debe evitar
los nombres de un solo carácter en el código real):
var myNum:Number = (a = b + c) + d;
// sentencia if..else
if (condition) {
// sentencias
} else {
// sentencias
}
// sentencia else..if
if (condition) {
// sentencias
} else if (condition) {
// sentencias
} else {
// sentencias
}
En el código siguiente se utiliza el formato correcto, pues las condiciones se escriben entre
paréntesis:
if ((fruit == apple) && (veggie == leek)) {}
Puede escribir una sentencia condicional que devuelve un valor booleano de dos formas.
El segundo ejemplo es preferible:
if (cartArr.length>0) {
return true;
} else {
return false;
}
El segundo fragmento es más corto y tiene menos expresiones para evaluar. Es más fácil leerlo
y entenderlo.
En el siguiente ejemplo se comprueba si la variable y es mayor que cero (0) y devuelve el
resultado de x/y o un valor cero (0).
return ((y > 0) ? x/y : 0);
En el siguiente ejemplo se muestra otra forma de escribir este código. Este ejemplo es
preferible:
if (y>0) {
return x/y;
} else {
return 0;
}
Coloque llaves alrededor de las sentencias cuando formen parte de una estructura de control
(if..else o for), aunque contengan una sola sentencia. En el siguiente ejemplo se muestra
código escrito de forma incorrecta:
//mal
if (numUsers == 0)
trace("no users found.");
Aunque este código es válido, se considera que está incorrectamente escrito porque las
sentencias no aparecen entre llaves. En este caso, si añade otra sentencia después de la
sentencia trace, el código se ejecutará independientemente de que la variable numUsers sea
igual a 0.
//mal
var numUsers:Number = 5;
if (numUsers == 0)
trace("no users found.");
trace("I will execute");
La ejecución del código sin tener en cuenta la variable numUsers puede producir resultados
inesperados. Por este motivo, añada llaves como se muestra en el siguiente ejemplo:
var numUsers:Number = 0;
if (numUsers == 0) {
trace("no users found");
}
Al escribir una condición, no añada al código la parte ==true redundante, como se muestra a
continuación:
if (something == true) {
// sentencias
}
// try..catch..finally
try {
// sentencias
} catch (myErr) {
// sentencias
} finally {
// sentencias
}
Se puede introducir una pequeña variación en el primer ejemplo de esta sección si se utiliza el
método handleEvent, pero esta técnica es algo más incómoda. Macromedia no recomienda
esta técnica, pues es necesario utilizar una serie de sentencias if..else o una sentencia
switch para detectar el evento que se captura.
var boxLdr:mx.controls.Loader;
var ldrListener:Object = new Object();
ldrListener.handleEvent = function(evt:Object) {
switch (evt.type) {
case "progress" :
trace("loader loading:" + Math.round(evt.target.percentLoaded) + "%");
break;
case "complete" :
trace("loader complete:" + evt.target._name);
break;
}
};
boxLdr.addEventListener("progress", ldrListener);
boxLdr.addEventListener("complete", ldrListener);
boxLdr.load("http://www.helpexamples.com/flash/images/image1.jpg");
Mensajes de error
Macromedia Flash Basic 8 y Macromedia Flash Professional 8 ofrecen una función para crear
informes de error durante la compilación cuando se publica para ActionScript 2.0 (valor
predeterminado). La tabla siguiente contiene una lista de mensajes de error que el compilador
de Flash puede generar:
817
Número Texto del mensaje
de error
1112 Una clase no se puede ampliar.
1113 Una interfaz no se puede ampliar.
1114 No hay ninguna interfaz definida con este nombre.
1115 Una clase no puede ampliar una interfaz.
1116 Una interfaz no puede ampliar una clase.
1117 Se espera un nombre de interfaz después de la palabra clave ‘implements’.
1118 Una clase no puede implementar otra clase, sólo interfaces.
1119 La clase debe implementar el método ‘Nombremétodo’ de la interfaz
‘Nombreinterfaz’.
1120 La implementación de un método de interfaz tiene que ser un método, no una
propiedad.
1121 Una clase no puede ampliar la misma interfaz más de una vez.
1122 La implementación del método de interfaz no coincide con su definición.
1123 Esta construcción sólo está disponible en ActionScript 1.0.
1124 Esta construcción sólo está disponible en ActionScript 2.0.
1125 Las interfaces no admiten miembros de clase estáticos.
1126 La expresión devuelta tiene que coincidir con el tipo de devolución de la
función.
1127 Esta función requiere una acción 'return'.
1128 Atributo utilizado fuera de una clase.
1129 Las funciones cuyo tipo de devolución sea Void no podrán devolver un valor.
1130 La cláusula 'extends' debe aparecer antes de la cláusula 'implements'.
1131 Después de ':' se espera un identificador de tipo.
1132 Las interfaces deben utilizar la palabra clave 'extends' y no 'implements'.
1133 Una clase no podrá ampliar más de una clase.
1134 Una interfaz no podrá ampliar más de una interfaz.
1135 No hay ningún método que lleve por nombre ‘<Nombremétodo>’.
1136 Las definiciones de interfaz no admiten este tipo de declaración.
1137 Las funciones set requieren exactamente un parámetro.
1138 Las funciones get no requieren ningún parámetro.
1139 Sólo se pueden definir clases en scripts de clase ActionScript 2.0 externos.
819
Número Texto del mensaje
de error
1161 No es posible borrar clases, interfaces o tipos integrados.
1162 No hay ninguna clase que lleve este nombre.
1163 La palabra clave <palabraclave> está reservada para ActionScript 2.0 y, por lo
tanto, no se podrá utilizar aquí.
1164 No se ha concluido la definición del atributo personalizado.
1165 Sólo se podrá definir una clase o interfaz por cada archivo as de
ActionScript 2.0.
1166 La clase que se está compilando, ‘<A.b>’, no coincide con la clase que se
importó, ‘<A.B>’.
(Este error tiene lugar cuando el nombre de una clase se escribe con
mayúsculas/minúsculas diferentes de las de una clase importada. Por
ejemplo, la compilación de la clase mx.com.util genera el error 1166 si la
sentencia import mx.Com aparece en el archivo util.as.)
1167 Debe especificar un nombre de clase.
1168 El nombre de clase que ha introducido contiene un error de sintaxis.
1169 El nombre de interfaz que ha introducido contiene un error de sintaxis.
1170 El nombre de clase base que ha introducido contiene un error de sintaxis.
1171 El nombre de interfaz base que ha introducido contiene un error de sintaxis.
1172 Tiene que escribir un nombre de interfaz.
1173 Tiene que escribir un nombre de clase o de interfaz.
1174 El nombre de clase o de interfaz que ha introducido incluye un error de
sintaxis.
1175 No se puede acceder a 'variable' desde este ámbito.
1176 El atributo ‘get/set/private/public/static’ aparece en varias ocasiones.
1177 Se ha utilizado un atributo de clase incorrectamente.
1178 No se pueden utilizar variables de instancia y funciones para inicializar
variables estáticas.
1179 Se han descubierto circularidades de tiempo de ejecución entre las
siguientes clases: <lista de clases definidas por el usuario>.
Este error de tiempo de ejecución indica que las clases personalizadas hacen
referencia unas a otras de forma incorrecta.
1180 El Flash Player que se desea utilizar como destino no admite depuración.
1181 El Flash Player que se desea utilizar como destino no admite el evento
releaseOutside.
821
Número Texto del mensaje
de error
1198 Las mayúsculas/minúsculas de la función de miembro ‘<nombreclase>’ no
coinciden con las del nombre de clase que se está definiendo,
‘<NombreClase>’, y no se interpretarán como constructor de clase en tiempo
de ejecución.
1199 El único tipo permitido para repetidores de reproducción indefinida for-in es
Cadena.
1200 Las funciones de definidor no pueden devolver un valor.
1201 Los únicos atributos permitidos para las funciones constructoras son public y
private.
1202 No se encontró el archivo 'toplevel.as', que es necesario para la verificación
de tipos de ActionScript 2.0. Asegúrese de que el directorio '$(LocalData)/
Classes' aparece en la ruta de clases global de Preferencias de ActionScript.
1203 Branch entre <spanStart> y <spanEnd>> supera el intervalo de 32 KB.
1204 No se encontró ninguna clase o paquete que lleve por nombre
'<packageName>' en el paquete '<PackageName>'.
1205 El Flash Player que se desea utilizar como destino no admite la acción
FSCommand2.
1206 La función Member '<nombreFunción>' es mayor que 32 KB.
1207 La función Anonymous alrededor de la línea <númeroLínea> supera el
intervalo de 32 KB.
1208 La función Code alrededor de la línea <númeroLínea> supera el intervalo de
32 KB.
1210 El nombre del paquete '<NombrePaquete>' no puede utilizarse además como
nombre de método.
1211 El nombre del paquete '<NombrePaquete>' no puede utilizarse además como
nombre de propiedad.
1212 No se pudo crear el archivo ASO de la clase '<NombreClase>'. Asegúrese de
que el nombre de clase completo es lo suficientemente corto para que el
nombre de archivo ASO, '<NombreClase.aso>', no supere los 255 caracteres.
1213 ActionScript no permite este tipo de comillas Cámbielas por comillas dobles
estándar (rectas).
Operadores de Flash 4 no
admitidos
B
En la siguiente tabla se enumeran los operadores exclusivos de Flash 4 no admitidos por
ActionScript 2.0. No utilice estos operadores a no ser que esté publicando en Flash Player 4 o
versiones anteriores.
823
824 Operadores de Flash 4 no admitidos
APÉNDICE C
Para más información sobre la clase Key, consulte Key en Referencia del lenguaje ActionScript
2.0. Para capturar teclas al probar un archivo SWF en el entorno de edición (Control > Probar
película), asegúrese de seleccionar Control > Deshabilitar métodos abreviados de teclado.
825
Letras de la A a la Z y números estándar del 0 al 9
En la tabla siguiente se enumeran las teclas de un teclado estándar para las letras de la A a la Z
y los números del 0 al 9, con los valores correspondientes del código de tecla usados para
identificar las teclas en ActionScript.
B 66 66
C 67 67
D 68 68
E 69 69
F 70 70
G 71 71
H 72 72
I 73 73
J 74 74
K 75 75
L 76 76
M 77 77
N 78 78
O 79 79
P 80 80
Q 81 81
R 82 82
S 83 83
T 84 84
U 85 85
V 86 86
W 87 87
X 88 88
Y 89 89
0 48 48
1 49 49
2 50 50
3 51 51
4 52 52
5 53 53
6 54 54
7 55 55
8 56 56
9 57 57
a 65 97
b 66 98
c 67 99
d 68 100
e 69 101
f 70 102
g 71 103
h 72 104
i 73 105
j 74 106
k 75 107
l 76 108
m 77 109
n 78 110
o 79 111
p 80 112
q 81 113
r 82 114
827
Tecla de letra o Código de tecla Código de tecla ASCII
número
s 83 115
t 84 116
u 85 117
v 86 118
w 87 119
x 88 120
y 89 121
z 90 122
Teclado numérico 1 97 49
Teclado numérico 2 98 50
Teclado numérico 3 99 51
Multiplicar 106 42
Sumar 107 43
Intro 13 13
Restar 109 45
Dividir 111 47
Teclas de función
En la tabla siguiente se enumeran las teclas de función de un teclado estándar con los valores
correspondientes del código de tecla usados para identificar las teclas en ActionScript:
F3 114 0
F4 115 0
F5 116 0
F6 117 0
F7 118 0
F8 119 0
F9 120 0
F10 Esta tecla está reservada por Esta tecla está reservada por el
el sistema y no puede sistema y no puede utilizarse en
utilizarse en ActionScript. ActionScript.
F11 122 0
F12 123 0
F13 124 0
F14 125 0
F15 126 0
829
Otras teclas
En la tabla siguiente se enumeran las teclas de un teclado estándar que no son letras, números,
teclas del teclado numérico ni teclas de función, con los valores correspondientes del código
de tecla usados para identificar las teclas en ActionScript:
Tabulador 9 9
Intro 13 13
Mayús 16 0
Control 17 0
Bloq Mayús 20 0
Esc 27 27
Barra espaciadora 32 32
Re Pág 33 0
Av Pág 34 0
Fin 35 0
Inicio 36 0
Flecha izquierda 37 0
Flecha arriba 38 0
Flecha derecha 39 0
Flecha abajo 40 0
Insert 45 0
Supr 46 127
Bloq Num 144 0
ScrLk 145 0
Pausa/Interr 19 0
;: 186 59
=+ 187 61
-_ 189 45
/? 191 47
`~ 192 96
\| 220 92
]} 221 93
"' 222 39
, 188 44
. 190 46
/ 191 47
Para valores de código de tecla y ASCII, utilice el código ActionScript al principio de este
apéndice y presione la tecla que desee para conocer el código de la misma.
831
832 Teclas del teclado y valores de códigos de tecla
APÉNDICE D
833
Utilización de Flash 8 para crear
contenido para Flash Player 4
Si desea utilizar Flash 8 para crear contenido para Flash Player 4, especifique Flash Player 4 en
la ficha Flash del cuadro de diálogo Configuración de publicación (Archivo > Configuración
de publicación).
ActionScript de Flash Player 4 solamente tiene un tipo de datos primitivo básico que se utiliza
tanto para la manipulación numérica como para la manipulación de cadenas. Al crear una
aplicación para Flash Player 4, debe utilizar los operadores de cadena desfasados que se
encuentran en la categoría Eliminado en nuevas versiones > Operadores de la caja de
herramientas de ActionScript.
Puede utilizar las funciones siguientes de Flash 8 al publicar para Flash Player 4:
■ El operador de acceso a matriz y objeto ([])
■ El operador de punto (.)
■ Los operadores lógicos, los operadores de asignación y los operadores de incremento
previo e incremento/decremento posterior
■ El operador de módulo (%) y todos los métodos y propiedades de la clase Math
Originariamente, Flash Player 4 no es compatible con los siguientes elementos de lenguaje.
Flash 8 los exporta como aproximaciones de series, lo que da lugar a resultados con menor
precisión numérica. Además, debido a la inclusión de aproximaciones de series en el archivo
SWF, estos elementos ocupan más espacio en los archivos SWF de Flash Player 4 que en los
archivos SWF de Flash Player 5 o posterior.
■ Las acciones for, while, do..while, break y continue
■ Las acciones print() y printAsBitmap()
■ La acción switch
Para más información, consulte “Utilización de versiones anteriores de Flash Player” en
la página 833.
Para escribir la misma ruta de destino en la sintaxis con puntos, que admite Flash Player 5 y
versiones posteriores, utilice la sintaxis siguiente:
myMovieClip.childMovieClip.myVariable
La sintaxis con barra inversa se utilizaba comúnmente con la acción tellTarget, pero ya no
se recomienda su uso. Ahora es recomendable emplear la acción with debido a que es más
compatible con la sintaxis con punto. Para más información, consulte tellTarget function
y with statement en Referencia del lenguaje ActionScript 2.0.
Programación orientada a
objetos con ActionScript 1.0
E
La información de este apéndice procede de la documentación de Macromedia Flash MX y
ofrece información sobre la utilización del modelo de objetos ActionScript 1.0 para crear
scripts. Se incluye aquí por las siguientes razones:
■ Si desea escribir scripts orientados a objetos compatibles con Flash Player 5, debe
utilizar ActionScript 1.0.
■ Si ya utiliza ActionScript 1.0 para escribir scripts orientados a objetos y no está listo para
cambiar a ActionScript 2.0, puede consultar este apéndice para encontrar o revisar la
información necesaria para escribir sus scripts.
Si nunca ha utilizado ActionScript para escribir scripts orientados a objetos y no necesita
utilizar Flash Player 5, no haga uso de la información de este apéndice, ya que la escritura de
scripts orientados a objetos con ActionScript 1.0 está desfasada. Para obtener información
sobre cómo utilizar ActionScript 2.0, consulte el Capítulo 6, “Clases”, en la página 195.
Este capítulo contiene las siguientes secciones:
ActionScript 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .838
Creación de un objeto personalizado en ActionScript 1.0. . . . . . . . . . . . . . . . . . . . 840
Asignación de métodos a un objeto personalizado en ActionScript 1.0 . . . . . . . . 841
Definición de métodos de controlador de eventos en ActionScript 1.0 . . . . . . . . .842
Creación de herencia en ActionScript 1.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .845
Adición de propiedades de captador/definidor a objetos en ActionScript 1.0 . . .846
Utilización de las propiedades del objeto Function en ActionScript 1.0 . . . . . . . . 847
Este método sólo funciona con Flash Player 6 y versiones posteriores; no emplee
este método si va a utilizar Flash Player 5.
837
ActionScript 1.0
Numerosos usuarios de Flash pueden beneficiarse en gran medida de la utilización de
N OT A
En la creación de scripts orientados a objetos, las clases pueden recibir propiedades y métodos
de ellas mismas, de acuerdo a un orden determinado; esta función se denomina herencia. La
herencia puede utilizarse para ampliar o redefinir las propiedades y métodos de una clase. Una
clase que hereda propiedades y métodos de otra clase recibe el nombre de subclase. La clase que
pasa propiedades y métodos a otra clase se denomina superclase. Una clase puede ser a la vez
subclase y superclase.
Un objeto es un tipo de datos complejo que contiene cero o más propiedades y métodos. Cada
propiedad tiene un nombre y un valor, como los tiene una variable. Las propiedades están
asociadas al objeto y contienen los valores que pueden cambiarse y recuperarse. Estos valores
pueden ser de cualquier tipo de datos: cadena, número, booleano, objeto, clip de película o no
definido. Las siguientes propiedades tienen varios tipos de datos:
customer.name = "Jane Doe";
customer.age = 30;
customer.member = true;
customer.account.currentRecord = 609;
customer.mcInstanceName._visible = true;
La propiedad de un objeto también puede ser un objeto. En la línea 4 del ejemplo anterior,
account es una propiedad del objeto customer y currentRecord es una propiedad de
account. El tipo de datos de la propiedad currentRecord es numérico.
Para crear un objeto personalizado, debe definir una función constructora. A una función
constructora siempre se le asigna el mismo nombre que al tipo de objeto que crea. Puede
utilizar la palabra clave this en el cuerpo de la función constructora para hacer referencia al
objeto que crea el constructor; al llamar a una función constructora, Flash pasa la palabra clave
this a la función como parámetro oculto. La función constructora que se muestra en el
siguiente ejemplo crea un círculo con la propiedad radius:
function Circle(radius) {
this.radius = radius;
}
Tras definir la función constructora, debe crear una instancia del objeto. Anteponga el
operador new al nombre de la función constructora y asigne un nombre de variable a la nueva
instancia. En el código siguiente, por ejemplo, se utiliza el operador new para crear un objeto
Circle con un radio de 5 y se asigna a la variable myCircle:
myCircle = new Circle(5);
Cada función constructora tiene una propiedad prototype que se crea automáticamente al
definir la función. La propiedad prototype indica los valores predeterminados de la
propiedad para los objetos creados con esa función. Cada nueva instancia de un objeto tiene
una propiedad __proto__ que hace referencia a la propiedad prototype de la función
constructora que la ha creado. Por consiguiente, si se asignan métodos a la propiedad
prototype de un objeto, dichos métodos sólo estarán disponibles para las instancias nuevas
creadas del objeto. Lo mejor es asignar un método a la propiedad prototype de la función
constructora, ya que de este modo sólo existe en un lugar y las nuevas instancias del objeto (o
clase) hacen referencia al mismo. Pueden utilizarse las propiedades prototype y __proto__
para ampliar los objetos de modo que pueda reutilizarse el código de forma orientada a los
objetos. Para más información, consulte “Creación de herencia en ActionScript 1.0” en
la página 845.
En el procedimiento siguiente se muestra cómo asignar un método getArea() a un objeto
Circle personalizado.
2. Defina el método getArea() del objeto Circle. El método getArea() calcula el área del
círculo. En el siguiente ejemplo, puede utilizar un literal de función para definir el método
getArea() y asignar la propiedad getArea al objeto prototipo del círculo:
Circle.prototype.getArea = function () {
return Math.PI * this.radius * this.radius;
};
4. Llame al método getArea() del nuevo objeto myCircle mediante el siguiente código:
var myCircleArea = myCircle.getArea();
trace(myCircleArea); // realiza un seguimiento de 50.265...
ActionScript busca el objeto myCircle para el método getArea(). Dado que el objeto no
tiene un método getArea(), se busca el objeto prototipo Circle.prototype para
getArea(). ActionScript lo encuentra, lo llama y traza myCircleArea.
Puede crear una clase de ActionScript para clips de película y definir los métodos de
controlador de eventos del objeto prototipo de esta nueva clase. La definición de los métodos
del objeto prototipo hace que todas las instancias de este símbolo respondan a estos eventos
del mismo modo.
La nueva clase se asigna a todas las instancias de clip de película añadidas a la aplicación
mediante la línea de tiempo o con el método attachMovie() o duplicateMovieClip().
Si desea que estos clips de película puedan acceder a los métodos y propiedades del objeto
incorporado MovieClip, deberá hacer que la nueva clase herede de la clase MovieClip.
3. Introduzca código como el del siguiente ejemplo:
// heredar de la clase MovieClip
myClipClass.prototype = new MovieClip();
5. Seleccione Ventana > Biblioteca para abrir el panel Biblioteca si aún no está abierto.
6. Seleccione los símbolos que desea asociar con la nueva clase y elija Vinculación en el menú
emergente del panel Biblioteca.
7. En el cuadro de diálogo Propiedades de vinculación, seleccione Exportar para ActionScript.
Este paso registra cualquier símbolo cuyo identificador de vinculación sea theID con la
clase myClipClass. Todas las instancias de myClipClass tienen métodos de controlador
de eventos que se comportan tal como se definió en el paso 4. También se comportan
como todas las instancias de la clase MovieClip, puesto que en el paso 3 se indicó que la
nueva clase debe heredar de la clase MovieClip.
El código completo se muestra en el siguiente ejemplo:
function myClipClass(){}
myClipClass.prototype.onEnterFrame = function(){
trace("movie clip entered frame");
}
myClipClass.prototype.myfunction = function(){
trace("myfunction called");
}
Object.registerClass("myclipID",myClipClass);
this.attachMovie("myclipID","clipName",3);
La herencia es una forma de organizar, ampliar y reutilizar funciones. Las subclases heredan las
propiedades y los métodos de las superclases y, además, añaden sus propios métodos y
propiedades especializados. Para poner un ejemplo real, podemos decir que Bicicleta sería una
superclase y que Bicicleta de montaña (BTT) y Triciclo serían subclases de dicha superclase.
Ambas subclases contienen, o heredan, los métodos y las propiedades de la superclase (por
ejemplo, wheels). Cada subclase tiene, asimismo, sus propias propiedades y métodos que se
amplían a la superclase (la subclase BTT, por ejemplo, tendría una propiedad gears). Para
crear herencia en ActionScript pueden utilizarse los elementos prototype y __proto__.
Todas las funciones constructoras tienen una propiedad prototype que se crea
automáticamente cuando se define la función. La propiedad prototype indica los valores
predeterminados de la propiedad para los objetos creados con esa función. La propiedad
prototype puede utilizarse para asignar propiedades y métodos a una clase. Para más
información, consulte “Asignación de métodos a un objeto personalizado en ActionScript 1.0”
en la página 841.
Todas las instancias de una clase tienen una propiedad __proto__ que indica de qué objeto
heredan métodos y propiedades. Al utilizar una función constructora para crear un objeto, se
define la propiedad __proto__ para hacer referencia a la propiedad prototype de su función
constructora.
La herencia se comporta de acuerdo a una jerarquía determinada. Cuando se llama a la
propiedad o al método de un objeto, ActionScript busca en el objeto para ver si existe tal
elemento. Si no existe, ActionScript busca la información (myObject.__proto__) en la
propiedad __proto__ del objeto. Si la propiedad no pertenece al objeto __proto__ del
objeto, ActionScript busca en myObject.__proto__.__proto__, y así sucesivamente.
En el ejemplo siguiente se define la función constructora Bike():
function Bike(length, color) {
this.length = length;
this.color = color;
this.pos = 0;
}
En lugar de añadir roll() a la clase MountainBike y a la clase Tricycle, puede crear la clase
MountainBike con la clase Bike como superclase, como se muestra en el siguiente ejemplo:
MountainBike.prototype = new Bike();
Los clips de película no heredan entre sí. Para crear herencia en los clips de película, puede
utilizar el método Object.registerClass() para asignar una clase distinta de MovieClip a
los clips de película.
La función captador carece de parámetros. El valor devuelto puede ser de cualquier tipo.
El tipo de valor puede cambiar según la invocación. El valor devuelto se trata como el
valor actual de la propiedad.
La función definidor acepta un parámetro: el nuevo valor de la propiedad. Por ejemplo, si la
propiedad x se asigna mediante la sentencia x = 1, la función definidor recibirá el parámetro 1
del tipo número. El valor devuelto de la función definidor se ignora.
Cuando Flash lee una propiedad de captador/definidor, invoca la función captador y el valor
devuelto por la función se convierte en un valor de prop. Cuando Flash escribe una propiedad
de captador/definidor, invoca la función definidor y le pasa el nuevo valor como parámetro. Si
existe una propiedad con ese nombre concreto, la nueva propiedad lo sobrescribe.
Puede especificar el objeto al que se aplica una función y los valores de los parámetros que se
pasan a la función mediante los métodos call() y apply() del objeto Function. Cada
función de ActionScript se representa mediante un objeto Function, de modo que todas las
funciones admiten los métodos call() y apply(). Al crear una clase personalizada mediante
una función constructora, o al definir métodos para una clase personalizada utilizando una
función, puede invocar los métodos call() y apply() para la función.
En algunos casos, es posible que desee que this haga referencia a otro elemento; por ejemplo,
si debe invocarse una función como un método de un objeto, pero en realidad no se almacena
como método de dicho objeto, como se muestra en el siguiente ejemplo:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
Puede pasar el valor null para el parámetro thisObject para invocar una función como
función regular y no como un método de un objeto. Por ejemplo, las llamadas de función
siguientes son equivalentes:
Math.sin(Math.PI / 4)
Math.sin.call(null, Math.PI / 4)
El método Function.apply() especifica el valor de this que debe utilizarse en una función
que llama ActionScript. Este método también especifica parámetros que deben pasarse a la
función llamada.
Los parámetros se especifican como un objeto Array. Suele ser útil cuando no se conoce el
número de parámetros hasta que se ejecuta el script.
Para más información, consulte apply (método Function.apply) en Referencia del lenguaje
ActionScript 2.0.
Terminología
Como con cualquier otro lenguaje de creación de scripts, ActionScript utiliza su propia
terminología. Macromedia Flash también usa su terminología específica. En la siguiente lista
se facilita una introducción a importantes términos de ActionScript y Flash relativos a la
programación con ActionScript y específicos al uso de un entorno de edición de Flash.
Editor de ActionScript: editor de código que se muestra en el panel Acciones y la ventana
Script. Está formado por distintas funciones, como el formato automático, la visualización de
caracteres ocultos y partes de código de color de los scripts. (Consulte también: ventana
Script, panel Acciones).
Panel Acciones: panel del entorno de edición de Flash en el que se escribe código
ActionScript.
Función anónima: función sin nombre a la que se hace referencia cuando se crea. Para
obtener información y ver un ejemplo, consulte “Escritura de funciones anónimas y callback”
en la página 176.
Mapa de bits: se refiere a texto de mapa de bits que no utiliza variaciones de color para que
sus bordes dentados se muestren más suaves, a diferencia del texto suavizado (consulte la
definición siguiente).
Suavizado: se refiere a afinar texto de modo que los bordes de los caracteres no aparezcan
excesivamente dentados en la pantalla. La opción de suavizado en Flash permite obtener un
texto más legible alineando los contornos del texto a los límites de los píxeles y resulta efectivo
para representar con mayor claridad los tamaños de fuente más pequeños.
Matrices: objetos cuyas propiedades se identifican mediante números que representan sus
posiciones en la estructura. Básicamente, una matriz es una lista de elementos.
Entorno de edición: espacio de trabajo de Flash que incluye todos los elementos de la interfaz
de usuario. Los archivos de script o FLA (en la ventana Script) se crean a través del entorno de
edición.
851
Imágenes de mapa de bits (o gráficos raster): son normalmente imágenes realistas
fotográficas o gráficos con una gran cantidad de detalles. Cada píxel (o bit) de la imagen
contiene un dato y la combinación de estos bits forma la imagen. Los mapas de bits se pueden
guardar en formatos de archivo JPEG, BMP o GIF. Otro tipo de gráfico, diferente al mapa de
bits, es el vector.
Booleano: valor verdadero (true) o falso (false).
Caché: se refiere a la información que se vuelve a utilizar en la aplicación o la que se almacena
en el equipo de forma que se pueda volver a utilizar. Por ejemplo, si se descarga una imagen de
Internet, a menudo se almacena en caché para que se pueda volver a ver sin descargar los datos
de la misma.
Funciones callback: funciones anónimas que se asocian a un determinado evento. Una
función llama a una función callback tras producirse un determinado evento, por ejemplo,
después de que algo termine de cargarse (onLoad()) o finalice su animación
(onMotionFinished()). Para más información y ver ejemplos, consulte “Escritura de
funciones anónimas y callback” en la página 176.
Caracteres: letras, numerales y puntuación que se combinan para formar cadenas. Los
parámetros se denominan a veces glifos.
Clase: tipo de datos que puede emplearse para definir un nuevo tipo de objeto. Para definir
una clase, se utiliza la palabra clave class en un archivo de script externo (no en un script que
se esté escribiendo en el panel Acciones).
Ruta de clases: se refiere a la lista de carpetas en las que Flash busca las definiciones de
interfaces y clases. Al crear un archivo de clase, es necesario guardarlo en uno de los directorios
especificados en la ruta de clases o en un subdirectorio de ésta. La ruta de clases existe a nivel
global (aplicación) y de documento.
Constante: elemento cuyo valor no cambia. Por ejemplo, la constante Key.TAB siempre tiene
el mismo significado: indica la tecla Tabulador de un teclado. Las constantes son útiles para
comparar valores.
Funciones constructoras (o constructores): funciones que se utilizan para definir (inicializar)
las propiedades y métodos de una clase. Por definición, los constructores son funciones
incluidas en definiciones de clases que tienen el mismo nombre que la clase. Por ejemplo, el
código siguiente define una clase Circle e implementa una función constructora:
// archivo Circle.as
class Circle {
private var circumference:Number;
// constructor
function Circle(radius:Number){
this.circumference = 2 * Math.PI * radius;
}
}
852 Terminología
El término constructor también se emplea para crear un objeto (crear instancias del mismo)
basado en una clase determinada. Las sentencias siguientes son llamadas a las funciones
constructoras de la clase Array incorporada y de la clase Circle personalizada:
var my_array:Array = new Array();
var my_circle:Circle = new Circle(9);
Tipos de datos: describe el tipo de información que puede contener una variable o un
elemento de ActionScript. Los tipos de datos incorporados de ActionScript son: cadena,
número, valor booleano, objeto, clip de película, función, nulo y no definido. Para más
información, consulte “Tipos de datos” en la página 328.
Fuentes de dispositivo: fuentes especiales en Flash que no están incorporadas en un archivo
SWF de Flash. En lugar de ello, Flash Player utiliza la fuente disponible en el equipo local más
parecida a la fuente de dispositivo. Dado que los contornos de fuente no están incorporados,
el tamaño del archivo SWF es menor que cuando se utilizan contornos de fuente
incorporados. No obstante, como las fuentes de dispositivo no están incorporadas, el aspecto
del texto que se cree puede ser diferente al esperado en los sistemas que no tengan instalada
una fuente que corresponda a la fuente de dispositivo. Flash incluye tres fuentes de
dispositivo: _sans (similar a la Helvetica y Arial), _serif (similar a la Times Roman) y
_typewriter (similar a la Courier).
Sintaxis con puntos: se refiere a cuando se utiliza un operador de punto (.) (sintaxis con
puntos) para acceder a propiedades o métodos que pertenecen a un objeto o instancia del
escenario mediante ActionScript. También puede utilizar el operador de punto para
identificar la ruta de destino de una instancia (como, por ejemplo, un clip de película), una
variable, una función o un objeto. Una expresión que utiliza la sintaxis con puntos empieza
por el nombre del objeto o clip de película seguido de un punto y termina con el elemento
que desee especificar.
Eventos: tienen lugar durante la reproducción de un archivo SWF. Por ejemplo, cuando se
carga un clip de película se generan diferentes eventos: la cabeza lectora accede a un
fotograma, el usuario hace clic en un botón o clip de película o el usuario introduce
información mediante el teclado.
853
Controladores de eventos: eventos especiales que se gestionan cuando se hace clic con el
ratón o cuando finaliza la carga de datos. Se distinguen dos tipos de controladores de eventos
de ActionScript: métodos de controlador de eventos y detectores de eventos. (También existen
dos controladores de eventos, on handler y onClipEvent handler, que pueden asignarse
directamente a botones y clips de película.) En la caja de herramientas Acciones, cada objeto
de ActionScript que tiene métodos de controlador de eventos o detectores de eventos cuenta
con una subcategoría denominada Eventos o Detectores. Algunos comandos pueden utilizarse
como controladores de eventos y como detectores de eventos y se incluyen en ambas
subcategorías. Para más información sobre gestión de eventos, consulte “Gestión de eventos”
en la página 305.
Expresión: cualquier combinación válida de símbolos de ActionScript que representan un
valor. Una expresión está formada por operadores y operandos. Por ejemplo, en la expresión x
+ 2, x y 2 son operandos y + es un operador.
Contenedor de Flash Player: se refiere al sistema que contiene la aplicación Flash, como un
navegador o la aplicación de escritorio. Se puede añadir ActionScript y JavaScript para facilitar
la comunicación entre el contenedor Flash Player y un archivo SWF.
FlashType: se refiere a la tecnología de representación avanzada de fuentes que utiliza Flash 8.
Por ejemplo, el texto de mapa de bits para legibilidad utiliza la tecnología de representación de
FlashType mientras que el texto de mapa de bits para animación no. Para obtener
información, consulte “Representación de fuentes y texto suavizado” en la página 434.
Scripts de fotograma: bloques de código que se añaden a un fotograma en una línea de
tiempo.
Funciones: bloques de código reutilizable que aceptan parámetros y pueden devolver un
valor. Para más información, consulte “Funciones y métodos” en la página 169.
Literales de función: funciones sin nombre que se declaran en una expresión en lugar de en
una sentencia. Son de gran utilidad si se desea usar una función temporalmente o utilizar una
función en el código en el que podría emplearse una expresión.
IDE: siglas que corresponden a “entorno de desarrollo integrado, Integrated Development
Environment". Se trata de una aplicación en la que un desarrollador puede codificar, probar y
depurar aplicaciones en un entorno interactivo. En ocasiones, la herramienta de edición de
Flash se denomina un IDE.
Identificador: nombre que se utiliza para identificar una variable, una propiedad, un objeto,
una función o un método. El primer carácter debe ser una letra, un carácter de subrayado (_)
o un símbolo de dólar ($). Los caracteres siguientes deben ser una letra, un número, un
carácter de subrayado o un símbolo de dólar. Por ejemplo, firstName es el nombre de una
variable.
854 Terminología
Instancias son objetos que contienen todas las propiedades y métodos de una clase concreta.
Por ejemplo, todas las matrices son instancias de la clase Array, de modo que puede utilizar
cualquiera de los métodos o propiedades de la clase Array con cualquier instancia de matriz.
Nombres de instancia son nombres exclusivos que permiten convertir en destino instancias
creadas por usted, o instancias de clip de película y botón en el escenario. Por ejemplo, en el
siguiente código, “names” y “studentName” son nombres de instancia para dos objetos, una
matriz y una cadena:
var names:Array = new Array();
var studentName:String = new String();
Utilice el inspector de propiedades para asignar nombres de instancia a las instancias del
escenario. Por ejemplo, un símbolo maestro de la biblioteca podría denominarse counter y las
dos instancias de dicho símbolo en el archivo SWF podrían denominarse scorePlayer1_mc y
scorePlayer2_mc. En el siguiente código se utilizan nombres de instancia para establecer una
variable denominada score en cada instancia del clip de película:
this.scorePlayer1_mc.score = 0;
this.scorePlayer2_mc.score = 0;
Se puede emplear strict data typing al crear instancias para que aparezcan sugerencias para el
código a medida que se escribe éste.
Palabra clave: palabra reservada que tiene un significado especial. Por ejemplo, var es una
palabra clave que se utiliza para declarar variables locales. Una palabra clave no puede
utilizarse como identificador. Por ejemplo, var no es un nombre de variable válido. Para
obtener una lista de palabras clave, consulte “Palabras clave” en la página 103 y “Palabras
reservadas” en la página 104.
Literales: representan valores que tienen un determinado tipo, como literales numéricos o
literales de cadena. Los literales no se almacenan en una variable. Un literal es un valor que
aparece directamente en el código y es un valor constante (sin cambiar) de los documentos de
Flash. Consulte también literal de función y literal de cadena.
Método: función asociada a una clase. Por ejemplo, sortOn() es un método incorporado
asociado a la clase Array. También puede crear funciones que actúen como métodos, ya sea
para objetos basados en clases incorporadas o para objetos basados en clases que haya creado.
Por ejemplo, en el código siguiente, clear() pasa a ser un método de un objeto controller
definido anteriormente:
function reset(){
this.x_pos = 0;
this.y_pos = 0;
}
controller.clear = reset;
controller.clear();
855
Los siguientes ejemplos muestran cómo crear métodos de una clase:
//Ejemplo de ActionScript 1.0
A = new Object();
A.prototype.myMethod = function() {
trace("myMethod");
}
Función con nombre: tipo de función que se crea con frecuencia en el código ActionScript
para realizar todo tipo de acciones. Para obtener información y ver un ejemplo, consulte
“Escritura de funciones con nombre” en la página 175.
Código de objeto: código ActionScript que se asigna a las instancias. Para añadir código de
objeto, seleccione una instancia en el escenario y, a continuación, escriba código en el panel
Acciones. No se recomienda asignar código a objetos en el escenario. Para obtener
información sobre prácticas recomendadas, consulte “Recomendaciones y convenciones de
codificación para ActionScript 2.0” en la página 775.
Objeto: conjunto de propiedades y métodos; cada objeto tiene su propio nombre y es una
instancia de una clase determinada. Los objetos incorporados están predefinidos en el lenguaje
ActionScript. Por ejemplo, la clase incorporada Date ofrece información procedente del reloj
del sistema.
Operador: término que calcula un nuevo valor a partir de uno o más valores. Por ejemplo, el
operador de suma (+) suma dos o más valores para generar un nuevo valor. Los valores
manipulados por los operadores se denominan operandos.
Parámetro (denominado también argumento): marcador de posición que permite pasar
valores a las funciones. La siguiente función welcome(), por ejemplo, utiliza dos valores que
recibe de los parámetros firstName y hobby:
function welcome(firstName:String, hobby:String):String {
var welcomeText:String = "Hello, " + firstName + ". I see you enjoy " +
hobby +".";
return welcomeText;
}
Paquetes: directorios que contienen uno o más archivos de clase y que residen en un
directorio de ruta de clases determinado (consulte “Paquetes” en la página 198).
856 Terminología
Fijación de scripts: permite fijar varios scripts de diversos objetos y trabajar con ellos
simultáneamente en el panel Acciones. Funciona mejor con el navegador de scripts.
JPEG progresivas: imágenes que se construyen de forma gradual y se muestran a medida que
se descargan de un servidor. Una imagen JPEG normal se mostrará línea a línea cuando se
descargue de un servidor.
Propiedad: atributo que define un objeto. Por ejemplo, length es una propiedad de todas las
matrices que especifica el número de elementos de la matriz.
Signos: caracteres especiales que ayudan a formar código ActionScript. Existen diversos
signos de lenguaje en Flash. El tipo más habitual de signos son el punto y coma (;), los dos
puntos (:), los paréntesis [()] y las llaves ({}). Cada uno de estos signos tiene un significado
específico en el lenguaje de Flash y contribuye a definir tipos de datos, terminar sentencias o
estructurar el código ActionScript.
Asistente de script: nuevo modo asistido del panel Acciones. El asistente de script facilita la
creación de scripts sin que sea necesario tener un profundo conocimiento de ActionScript.
Ayuda a crear sus scripts seleccionando elementos de la caja de herramientas Acciones del
panel Acciones y proporciona una interfaz de campos de texto, botones de opción y casillas de
verificación que proponen las variables correctas y otros componentes del lenguaje de creación
de scripts. Esta función es similar al modo normal de las ediciones anteriores de la herramienta
de edición de Flash.
Panel Script: panel del panel Acciones o la ventana Script donde se escribe el código
ActionScript.
Ventana Script: entorno de edición de código en el que puede crear y modificar scripts
externos, como archivos ActionScript y JavaScript de Flash. Por ejemplo, seleccione Archivo >
Nuevo y, a continuación, elija Archivo ActionScript para utilizar la ventana Script con objeto
de escribir un archivo de clase.
Sentencias son elementos del lenguaje que realizan o especifican una acción. Por ejemplo, la
sentencia return devuelve un resultado como valor de la función en la que se ejecuta. La
sentencia if evalúa una condición para determinar la siguiente acción que debe realizarse. La
sentencia switch crea una estructura ramificada para sentencias de ActionScript.
Cadena: secuencia de caracteres y tipo de datos. Consulte “Cadenas y la clase String” en
la página 480 para más información.
Literal de cadena: secuencia de caracteres encerrada completamente por caracteres de
comillas rectos. Los caracteres son en sí mismos un valor de datos, no una referencia a estos.
Un literal de cadena no es un objeto String. Para más información, consulte “Cadenas y la
clase String” en la página 480.
857
Superficie: clip de película que tiene activado el indicador de caché de mapa de bits. Para
obtener información sobre la caché de mapa de bits, consulte “Asignación de caché para un
clip de película” en la página 398.
Sintáxis:se refiere a la gramática y la ortografía de un lenguaje que le permite programar.
El compilador no comprende la sintaxis incorrecta, por lo que observará errores o
advertencias en el panel Salida cuando intente comprobar el documento en el entorno de
prueba. Por consiguiente, la sintaxis es un conjunto de reglas y directrices que le ayudan a
formar código ActionScript correcto.
Rutas de destino: direcciones jerárquicas de nombres de instancias de clips de película,
variables y objetos de un archivo SWF. El nombre de una instancia de clip de película se asigna
en el inspector de propiedades del clip de película. (La línea de tiempo principal siempre tiene
el nombre _root.) Se puede utilizar una ruta de destino para dirigir una acción a un clip de
película u obtener o definir el valor de una variable o propiedad. Por ejemplo, la sentencia
siguiente es la ruta de destino a la propiedad volume del objeto denominado stereoControl:
stereoControl.volume
Texto: serie de una o más cadenas que se puede mostrar en un campo de texto o dentro de un
componente de la interfaz de usuario.
Campos de texto: elementos visuales del escenario que permiten mostrar texto a un usuario y
que se pueden crear mediante la herramienta Texto o código ActionScript. Flash permite
establecer campos de texto como editables (de sólo lectura), posibilita la aplicación de formato
HTML, activa la compatibilidad con varias líneas, la creación de máscaras de contraseñas o la
aplicación de una hoja de estilos CSS al texto con formato HTML.
Formato de texto: se puede aplicar a un campo de texto o a ciertos caracteres dentro de un
campo de texto. A continuación se muestran algunos ejemplos de opciones de formato de
texto que se pueden aplicar: alineación, sangrado, negrita, color, tamaño de fuente, anchura de
márgenes, cursiva y espaciado entre caracteres.
Funciones de nivel superior: funciones que no pertenecen a una clase (a veces se denominan
funciones predefinidas o incorporadas), lo que significa que pueden llamarse sin un constructor.
Ejemplos de funciones que están incorporadas en el nivel superior del lenguaje ActionScript
son trace() y setInterval().
858 Terminología
Funciones definidas por el usuario: son aquellas que crea usted mismo para usarlas en
aplicaciones, a diferencia de las funciones en las clases incorporadas, que realizan funciones
predefinidas. Deberá asignar nombre a las funciones usted mismo y añadir sentencias en el
bloque de función.
Variable: identificador que almacena valores de cualquier tipo de datos. Las variables pueden
crearse, modificarse y actualizarse. Los valores almacenados en una variable pueden
recuperarse para ser utilizados en scripts. En el siguiente ejemplo, los identificadores situados a
la izquierda de los signos igual son variables:
var x:Number = 5;
var name:String = "Lolo";
var c_color:Color = new Color(mcinstanceName);
Para más información sobre el uso de variables, consulte “Variables” en la página 343.
Gráficos vectoriales: representan imágenes mediante líneas y curvas, denominadas vectores,
que también incluyen propiedades de color y posición. Cada vector utiliza cálculos
matemáticos, en lugar de bits, para describir la forma, lo que les permite ajustar la escala sin
degradar la calidad de la imagen. Otro tipo de gráfico es el mapa de bits, que se representa
mediante puntos o píxeles.
859
860 Terminología
Índice alfabético
Símbolos ActionScript
comparar versiones 73
"strict data typing" 343 configuración de publicación 66
\" 490 crear cuepoints 653
\’ 490 editar preferencias 45
\b 490 Flash Player 806
\f 490 formato 53
\n 490 información 71, 72
\r 490 ActionScript 2.0
\t 490 asignar la clase ActionScript 2.0 a los clips de
\unnnn 490 película 404
\xnn 490 mensajes de error del compilador 817
_lockroot, utilizar 794 ActionScript, editar
ajustar texto 56
Números Buscar, herramienta 58
comprobar sintaxis 59
9 divisiones, escala fijar scripts 63
activar 591 importar y exportar scripts 60
aspectos básicos 590 mostrar caracteres ocultos 57
información 589 números de línea 56
scale9Grid, propiedad 591 resaltado de sintaxis 55
utilizar 592 sugerencias para el código 51
teclas de método abreviado de Esc 56
activar depuración remota 757
A ADF 437, 440
acciones asíncronas 673 ajuste de texto en el código, activar 56
Acciones, caja de herramientas, elementos en ámbito
amarillo 55 en clases 795
acciones, estándares de codificación 791 información 86
Acciones, panel palabra clave this 324
Acciones, caja de herramientas 37 prácticas recomendadas 793
codificar 40 ámbito _root 87
definición 851 animación
información 36, 37 brillo 560
menú emergente 43 con filtro de iluminado 532
navegador de scripts 37 crear una barra de progreso 662
Script, panel 38 filtros 566
velocidad de fotogramas 503, 527
861
animación mediante scripts puntos de referencia (cuepoints) 648, 649
crear una barra de progreso 662 trabajar con puntos de referencia (cuepoints) 652
desplazar imágenes lateralmente 511 Véase también Vídeo
información 502 vídeo externo 641
interfaz API de dibujo 588 y Macintosh 661
interpolación de brillo 509 archivos JPEG
mover imágenes 511 cargar en clips de película 379, 629
mover objetos 510 incorporar en campos de texto 474
Tween y TransitionManager, clases 515 archivos MP3
y clase Tween 566 cargar 634, 635
y filtro de desenfoque 566 cargar en clips de película 634
y filtros 566 crear una barra de progreso 665
animación, símbolos 333 etiquetas ID3 638
animaciones leer etiquetas ID3 638
continuas 528 precargar 636, 647
que se ejecutan continuamente 529 archivos multimedia externos
antiAliasType, propiedad 438, 441, 444 archivos MP3 634
API de dibujo cargar 628
barra de progreso 674 cargar archivos de imagen y SWF 629
utilizar 674 cargar archivos SWF y de imagen 663
API externa crear animaciones de barras de progreso 662
información 704 precargar 647
utilizar 705 ProgressBar, componente 632
aplicaciones Web, conexión continua 698 y la línea de tiempo raíz 633
aplicar formato al código 53, 54 archivos SWF
archivo de clase cargar en clips de película 629
directrices para organizar 797 cargar y descargar 377
estructurar 796 colocar en página Web 599
archivos ASO 254 controlar en Flash Player 704
eliminar 255 crear controles de sonido 608
utilizar 254 escalar en Flash Player 701
archivos de clase externos incorporar en campos de texto 474
utilizar rutas de clases para localizar 211 mantener el tamaño original 701
archivos de configuración 69 pasar información 672
archivos de muestra, información 15 saltar a fotogramas o a escenas 597
archivos de política Véase también Clips de película
deben denominarse crossdomain.xml 744 archivos SWF cargados
definición 743 eliminar 377
política, archivos identificar 85
Véase también Seguridad archivos XML, actualizar para la instalación de Flash 8
archivos Flash 4, abrir con Flash 8 835 10
archivos FLV archivos, cargar 682
cargar archivos externos en tiempo de ejecución 643 argumentos
configurar el servidor para FLV 660 en funciones con nombre 176
crear un anuncio FLV 644 arguments
crear una barra de progreso 667 definición 856
metadatos 658 Véase también Parámetros
navegar con código 655 arquitectura basada en componentes, definición 373
precargar 647 arrastrar clips de película 381
precargar vídeo externo 647
C
B caché de mapa de bits
balance (sonido), controlar 610 asignar caché a un clip de película 398
barra de progreso cuándo evitar 398
crear con código 662 cuándo utilizar 396
para carga de datos 674 definición 394
y API de dibujo 674 enmascaramiento del canal alfa 403
bisel degradado, filtro habilitar 394
ángulo y valor de proporción 557 información 393, 513
aplicar 558 opaqueBackground, propiedad 394
aplicar a un clip de película 558 scrollRect 395
distribución de colores 555 superficies 394
información 554 ventajas y desventajas 396
matriz de colores 555 y filtros 536
matriz de proporciones 555 caché, definición 852
utilizar 556 cacheAsBitmap, propiedad 394
y propiedad strength 554 cadenas 336
y propiedades blurX y blurY 554 analizar 491
y propiedades knockout y type 554 comparar 491
y relleno 554 comparar con otros tipos de datos 494
y relleno de clip de película 557 convertir de minúsculas a mayúsculas 495
y resaltado 557 convertir y concatenar 495
bisel, filtro crear 489
información 552 crear una matriz de subcadenas 497
utilizar 552 definición 482, 857
BitmapData, clase determinar longitud 491
aplicar filtros a 538 devolver subcadenas 498
con filtro de mapa de desplazamiento 570 encontrar posición del carácter 499
información 568 encontrar subcadena 498
ruido, efecto 569 examinar caracteres 492
utilizar 569, 639 forzar comparaciones de tipos 494
Boolean (booleano) información 480
tipo de datos 331 reproducir indefinidamente 492
utilizar 489
I
G iconos
garbage collection 799 depurador 766
gestión de errores y filtros 539 encima del panel Script 41
getAscii(), método 603 IDE (entorno de desarrollo integrado), definición 854
getURL(), método 599 identificadores, definición 854