Argumento de Actionscript 3.0
ActionScript es el lenguaje de programación oficial de la plataforma Flash Adobe. Aunque en su origen se concibió como una simple herramienta para el control de animación, ha evolucionado desde entonces en un lenguaje de programación sofisticado para la creación de contenido y aplicaciones para la Web, dispositivos móviles y ordenadores de sobremesa. Este manual abarca los fundamentos de la programación en ActionScript 3.0 de un modo exhaustivo y detallado, y con una claridad y precisión extrema. Su exactitud y profundidad sin comparación es el resultado de una década entera de investigación diaria de ActionScript, experiencia de programación en el mundo real y un total acceso interno de los ingenieros de Adobe. Este libro es un perfecto manual para diseñadores y desarrolladores, que incluye explicaciones prácticas, intuitivas advertencias, así como útiles códigos ejemplo que demuestran cómo realizar el trabajo adecuadamente.0Contenido Prólogo Prefacio Bienvenida a principiantes Guía para expertos Qué encontramos en este libro Qué no encontramos en este libro Dudas sobre la herramienta de autoría Visión general de ActionScript El núcleo del lenguaje Clientes de tiempo de ejecución Flash Tiempos de ejecución API Componentes El formato de fichero Flash (SWF) Herramientas de desarrollo ActionScript Parte I. ActionScript desde su origen Capítulo 1. Conceptos del núcleo Herramientas para escribir el código en ActionScript Entornos de ejecución de cliente Flash Compilación Compilación just-in-time Revisión breve Clases y objetos Crear un programa Paquetes Definir una clase Acceso a modificadores de control para clases Repaso del zoo virtual Métodos constructores Creación de objetos Sintaxis literal Ejemplo de creación de un objeto: Añadir un animal al zoo Variables y valores Variables locales Variables de instancia Modificadores access-control para variables de instancia Parámetros y argumentos de constructor Expresiones Asignar un valor de variable a otro Copias y referencias Una variable de instancia para nuestro animal Métodos de instancia Modificadores de control de acceso para métodos de instancia Parámetros de método y argumentos Método devuelve valores Firmas de método Miembros y propiedades Revisión del zoo virtual ¡Un descanso! Capítulo 2. Condicionales y bucles Condicionales La declaración if Una declaración if sin else Declaraciones if encadenadas La declaración switch Bucles La declaración while Realizar listas con bucles Terminando un bucle con una declaración break La declaración do-while La declaración for Lógica booleana El operador lógico OR El operador lógico AND El operador lógico NOT Vuelta a las clases y objetos Capítulo 3. Vuelta a los métodos de instancia Omitir la palabra clave this Manejo de parámetros/conflictos de nombres de variable Métodos vinculados Usar métodos para examinar y modificar el estado de un objeto Métodos Obtener y establecer Manejo de un número desconocido de parámetros A continuación: información de nivel de clase y comportamiento Capítulo 4. Variables estáticas y métodos estáticos Variables estáticas Constantes Métodos estáticos El inicializador de clase Objetos de clase Comparación de terminología con C++ y Java Hacia las funciones Capítulo 5. Funciones Funciones de nivel de paquete Funciones globales Funciones anidadas Funciones de nivel de fichero fuente Definiciones de acceso desde dentro de una función Funciones como valores Sintaxis de una función literal Funciones recursivas Usar funciones en el programa VirtualZoo De vuelta a las clases Capítulo 6. Herencias La primera herencia Métodos estáticos y variables estáticas no heredados Método de instancia overriding Invocar un método de instancia override Métodos constructor en subclases Evitar que las clases sean extendidas y los métodos sean override Haciendo subclases de clases implícitas La teoría de la herencia ¿Por qué las herencias? Polimorfismo y vinculación dinámica Herencias frente a composición Es-Un, Tiene-Un, Usa-Un Cuándo usar composición en lugar de herencias No se soporta a abstracto Uso de herencias en el programa de zoo virtual Creación de tipos de comida de animales Preparar a VirtualZoo para visualizarlo en la pantalla Código del programa de zoo virtual ¡Runtime! Capítulo 7. Compilación y ejecución de un programa Compilación con la herramienta de autoría Flash Compilación con Flex Builder 2 Mover la clase principal a un paquete sin nombre Compilar el programa Ejecutar el programa Compilación con mxmlc Restricciones del compilador El proceso de compilación y el classpath Compilación en modo estricto frente a modo estándar Habilitar la compilación en modo estándar en Flex Builder 2 Habilitar la compilación en modo estándar en la herramienta de autoría Flash La diversión no ha terminado Capítulo 8. Tipos de datos y comprobación de tipo Tipos de datos y anotaciones de tipo Tipos compatibles Detectar errores de inconcordancia de tipo con anotaciones de tipo Variables, parámetros, valores de retorno y expresiones sin tipo Tres clases especiales de modo estricto Advertencias para anotaciones de tipo ausentes Detectar errores de regencia en la compilación Casting Evitar errores de inconcordancia de tipo no deseados Upcasting y downcasting Usar el operador as para hacer cast a date y array Conversión a tipos primitivos Valores de variable por defecto null y undefined Los tipos de datos en el zoo virtual Más estudio de tipos de datos próximamente Capítulo 9. Interfaces Un caso de interfaces Las interfaces y las clases con tipos de datos múltiples Sintaxis y uso de la interfaz Acuerdos de nombre de interfaz Herencias de interfaz Marker interfaces Otro ejemplo de tipos múltiples Capítulo 10. Sentencias y operadores Sentencias Operadores Número de operandos Prioridad en los operadores Asociación de operadores Tipos de datos y operadores Visión general de los operadores A continuación: Manejo de listas de información Capítulo 11. Arrays ¿Qué es un array? Anatomía de un array Elementos de array Indexación de elementos de un array Tamaño de array Creación de arrays Creación de arrays con arrays literales Arrays en otros lenguajes de programación Creación de arrays con el operador new Referenciar elementos de array Recuperar el valor de un elemento Establecer el valor de un elemento Determinar el tamaño de un array Añadir elementos a un array Añadir nuevos elementos directamente Añadir nuevos elementos con la variable length Añadir nuevos elementos con métodos array El método push() El método unshift() El método splice() El método concat() Eliminar elementos de un array Eliminar elementos con el operador delete Eliminar elementos con la variable length Eliminar elementos con métodos array El método pop() El método shift() El método splice() Comprobar los contenidos de un array con el método toString() Arrays multidimensionales Hacia los eventos Capítulo 12. Eventos y manejo de eventos Fundamentos de los eventos de ActionScript Registro de un listener de evento para un evento Paso 1: Determine el nombre del tipo de evento Paso 2: Determine el tipo de datos del objeto de evento Paso 3: Cree el listener de evento Paso 4: Registre el evento Paso 5: Espere a que se produzca el evento Dos ejemplos más de registro de listener de evento Eliminar un listener de evento en un evento Revisión de vocabulario de eventos Acceso al objeto target Acceso al objeto que ha registrado el listener Evitar comportamiento por defecto del evento Prioridad en listeners de evento Listeners de evento y gestión de memoria Referencias de listener débiles Eventos diseñados Un evento diseñado "gameOver" Un evento diseñado "interruptor" Evitar comportamiento por defecto en eventos diseñados Debilidades de tipos en la arquitectura de eventos Manejo de eventos a través de los límites de seguridad Registro del listener Module.swf con el objeto Main.swf El listener Main.swf recibe una notificación para un evento dirigido al objeto visualizable Module.swf Una alternativa a allowDomain(): Eventos compartidos ¿Y a continuación? Capítulo 13. Excepciones y gestión de errores El ciclo de manejo de excepción Manejo de múltiples tipos de excepciones Determinar el tipo de particularidad de la excepción Opciones 1 y 2: Utilización de un único tipo de excepción diseñado Opción 3: Utilización de mensajes de depuración configurables Opción 4: Múltiples subclases diseñadas VirtualPetNameException Burbujeo de excepciones Excepciones no encontradas El bloque finally Excepciones anidadas Cambios en el control del flujo en try/catch/finally Manejo de una excepción implícita Eventos de error en condiciones con problemas Más trabajo denodado a la vista Capítulo 14. Colección de basura Adecuación a la colección de basura Marcado y barrido gradual Deshacerse de objetos intencionadamente Desactivación de objetos Demostración de colección de basura Hacia el campo abierto de ActionScript Capítulo 15. ActionScript dinámico Variables de instancia dinámicas Ejecución de variables de instancia dinámicas en bucles for-each-in y for-in Añadir un nuevo comportamiento a una instancia de forma dinámica Referencias dinámicas a variables y métodos Utilizar variables de instancia dinámicas para crear tablas de búsqueda Realizar tablas de búsqueda con objetos literales Utilizar funciones para crear objetos Utilizar objetos prototype para aumentar las clases La cadena prototype ¡Adelante! Capítulo 16. Alcance Alcance global Alcance de clase Alcance de métodos estáticos Alcance de métodos de instancia Alcance de la función Resumen del alcance Detalles internos Expandir la cadena de alcance por medio de la sentencia with A los namespaces Capítulo 17. Namespaces Vocabulario de namespace Namespaces de ActionScript Creación de namespaces Elección del namespace URI Definición del namespace Los URI explícitos frente a los implícitos Revisión de terminología de namespace Utilizar un namespace para calificar definiciones de variables y métodos Atributos namespace definidos por el usuario sólo en el primer nivel de una clase Identificadores calificados Nombres expandidos Un ejemplo funcional de namespace Accesibilidad de los namespace Accesibilidad de las definiciones de namespace a nivel de paquete Accesibilidad de las definiciones namespace a nivel de clase Accesibilidad de las definiciones namespace a nivel de función Visibilidad de identificadores calificados Comparando identificadores calificados Asignar y pasar valores namespace Asignar un valor namespace a una variable Los namespace como argumentos de método y valores de retorno Ejemplo de un valor namespace Namespaces abiertos y utilización de la directiva de los namespaces Namespaces abiertos y el alcance Abrir varios namespaces Namespaces para los modificadores de control de acceso Importar namespaces public abiertos Ejemplos prácticos de namespace Ejemplo: Visibilidad interna del framework Ejemplo: Permisos basados en el control de acceso Ejemplo: Modos de programa Temas clave finales Capítulo 18. XML y E4X Entender los datos XML como una jerarquía Representar datos XML en E4X Creación de datos XML con E4X Acceso a datos XML Acceso al nodo raíz XML Acceso a los nodos hijo Acceso a nodos de texto Acceso a nodos padre Acceso a nodos hermano Acceso a los atributos Acceso a los comentarios y las instrucciones de proceso Acceso a los atributos y elementos cuyos nombres contienen nombres reservados Tratar un XMLList como un XML, de regreso Proceso XML con un for-each-in y for-in Penguin Books Ltd Acceso a los descendientes Filtración de datos XML Atravesar árboles XML Cambiar o crear contenido XML nuevo Cambiar los contenidos de un elemento Cambiar un valor del atributo Reemplazar un elemento completo Añadir nuevos atributos y elementos Añadir un nuevo hijo después de todos los hijos existentes Añadir un nuevo hijo detrás de un hijo existente Añadir un nuevo hijo antes de un hijo existente Añadir un nuevo hijo antes de todos los hijos existentes Borrar elementos y atributos Las referencias a las partes de un documento no están vivas Utilizar entidades XML con caracteres especiales Asignar valores a un XMLList Cargar datos XML Trabajar con Namespaces XML Acceso a los elementos y atributos calificados por un namespace Crear elementos y atributos calificados con namespace Convertir un XML y un XMLList en una cadena Convertir un XMLList a una cadena Convertir un elemento XML en una cadena Convertir un atributo en cadena Convertir comentarios e instrucciones de proceso en cadenas Determinar la igualdad en E4X Equivalencia XML Equivalencia XMLList Equivalencia QName Igualdad de namespace Aún queda por aprender Capítulo 19. Restricciones de seguridad de Flash Player Qué no encontramos en este capítulo Dominio local, dominio remoto y regiones remotas Tipos de seguridad sandbox Cómo asignar tipos de seguridad sandbox Generalizaciones de seguridad perjudiciales Restricciones en la carga de contenido, acceso al contenido como datos, el script cruzado y la carga de datos Carga de contenido Acceso al contenido como datos Cruce de script Carga de datos Restricciones en la carga de contenido, acceso al contenido como datos, carga de datos y cruce de script Seguridad socket Ejemplos de situaciones de seguridad Email adjunto Snoopy, sin seguridad FlashPlayer Email adjunto Snoopy, con seguridad Flash Player Información corporativa interna, sin seguridad Flash Player Información corporativa interna, con seguridad Flash Player Información de un sitio Web cruzada, sin seguridad Flash Player Información de un situo Web cruzada, con seguridad Flash Player Elegir un tipo de seguridad sandbox local Compilar un fichero .swf local-with-filesystem Compilar un fichero .swf local-with-networking Otorgar confianza local Diseñadores confiados automáticamente Tipo de seguridad sandbox local por defecto Permisos de distribuidor (Policy Files) Autorizar operaciones de carga de datos y de acceso al contenido como datos Creación del fichero de política Enviar el fichero de política Obtener permisos del fichero de política para cargar datos Obtener un permiso del fichero de política para acceder al contenido como datos Utilizar un fichero de política para autorizar conexiones socket Crear un fichero de política Recuperación del fichero de política socket Recuperación de ficheros de política HTTP Permisos de creador (allowDomain()) Permitir a ficheros .swf servidos en HTTP que crucen el script de ficheros .swf servidos en HTTPS Carga de importación Manejo de violaciones de seguridad Dominios de seguridad Uso ambiguo del término "sandbox" Dos temas comunes sobre el desarrollo de la seguridad Acceso a subdominios de Internet Acceso a la variable de instancia content de la clase Loader ¡A la parte 2! Parte II. Visualización e interactividad Capítulo 20. Visualización API y lista de visualización Visión general de la visualización API Extender la jerarquía de clase visualizable clave La lista visualizable Contenedores y profundidad Eliminar recursos de los contenedores Eliminar recursos de la memoria Eliminar todos los hijos Modificar el parentesco de los recursos Atravesar objetos en una jerarquía visualizable Manipular conjuntamente objetos en contenedores Acceso de los descendientes a la instancia de la clase principal de un fichero .swf El renacimiento de _root ¿Adónde está _level0? Eventos de contención Los eventos Event.ADDED y Event.REMOVED Un ejemplo de evento contenedor real Los eventos ADDED_TO_STAGE y REMOVED_FROM_STAGE Eventos diseñados Event.ADDED_TO_STAGE y Event.REMOVED_FROM_STAGE Clases gráficas diseñadas Seguimos con el flujo de eventos Capítulo 21. Eventos y jerarquía visualizables Envío de eventos jerárquico Fases de envío de evento Listeners de evento y el flujo de evento Registro de un listener de antecesor para una fase de captura Registrar un listener de antecesor en la fase de burbujeo Registrar un listener antecesor para la fase de captura y la fase de burbujeo Registrar un listener con el objetivo de evento El doble propósito del parámetro useCapture Eliminar listeners de evento Utilizar el flujo de eventos para centralizar el código Determinar la fase de evento actual Distinguir eventos dirigidos a un objeto de los eventos dirigidos a los descendientes de ese objeto Parar el envío de un evento Prioridad de eventos y flujo de eventos Mutación de la jerarquía visualizable y el flujo de eventos Mutación de la lista de listener de evento Eventos diseñados y el flujo de eventos A por la entrada de eventos Capítulo 22. Interactividad Eventos de entrada de ratón Eventos de ratón implícitos de Flash Player Registro de los eventos del ratón Eventos de ratón y objetos visualizables solapados Buscar la posición del puntero del ratón Manejo de los eventos de ratón "globalmente" Eventos de enfoque Enfocar objetos con el teclado Enfocar objetos con el ratón Manejo del enfoque del descendiente a través de un antecesor individual Eventos de enfoque de Flash Player Eventos de entrada del teclado Manejo global de eventos del teclado Manejo de eventos del teclado dirigidos a un objeto Determinar la tecla que se pulsó o soltó más recientemente Teclas de varias posiciones Detectar varias pulsaciones simultáneas Eventos del ratón y teclas modificadoras Determinar el carácter asociado a una tecla Eventos de entrada de texto Los eventos TextEvent.TEXT_INPUT y Event.CHANGE El evento Event.SCROLL El evento TextEvent.LINK Eventos de entrada a nivel de Flash Player Los eventos Event.ACTIVATE y Event.DEACTIVATE El evento Event.RESIZE El evento Event.MOUSE_LEAVE Del programa a la pantalla Capítulo 23. Actualizaciones de pantalla Actualizaciones de pantalla programadas No se hacen actualizaciones de pantallas dentro de los bloques de código Con fotograma &n de fotograma designado fren de fotograma real Actualizaciones de pantalla post evento Actualizaciones post evento para eventos Timer Actualizaciones de pantalla post evento automáticas Región de rediseño Optimización con el evento Event.RENDER ¡Vamos a hacer que se mueva! Capítulo 24. Programación de animaciones Sin bucles Animación con el evento ENTER_FRAME &n frame en las animaciones Event.ENTER_FRAME Animación con el evento TimerEvent.TIMER &n de fotograma en el Timer Elegir entre Timer y Event.ENTER_FRAME Un animador genérico Animación basada en la velocidad Vamos hacia los trazos y los rellenos Revisión de la clase Graphics Capítulo 25. Dibujar con vectores Dibujo de líneas Dibujo de curvas Dibujo de figuras Eliminar contenido de vector Ejemplo: Una librería de figuras orientadas a objetos De las líneas a los píxeles Capítulo 26. Programación bitmap Las clases BitmapData y Bitmap Valores de color en píxeles Creación de una nueva imagen bitmap Cargar una imagen externa bitmap Examinar un bitmap getPixel32() frente a getPixel() Efecto de transparencia en la recuperación de valores de color ColorPicker: un ejemplo de getPixel32() Recuperar el color de una región de píxeles Otras herramientas de análisis Modificar un bitmap Mejorar la realización con BitmapData.lock() ScribbleAS3: un ejemplo setPixel32() Asignar el color de una región de píxeles Otras herramientas de manipulación Modificar el tamaño de un Bitmap Copiar gráficos a un objeto BitmapData El método de instancia draw() de la clase BitmapData Cómo maneja draw() los valores de canal Alpha No existen capturas de pantalla arbitrarias El método de instancia copyPixels() de la clase BitmapData Aplicar filtros y efectos Aplicar filtros Liberar memoria usada por bitmaps Palabras, palabras, palabras Capítulo 27. Entrada y visualización de texto Crear y visualizar texto Cobertura de palabra Cambio de tamaño automático Los textos girados, torcidos y transparentes precisan fuentes integradas Modificar el contenido de un campo de texto Formatear campos de texto Formateo de texto con la clase TextFormat Variables TextFormat disponibles Alerta de fuente incrustada: negrita y cursiva requieren fuentes separadas setTextFormat() no se aplica a futuras asignaciones de texto Aplicar formateo a nivel de párrafo Recuperar información de formateo para series de caracteres Formato por defecto de campos de texto Formatear texto con HTML Soporte de entidad Valores de atributo de comillas Interacciones entre el texto y las variables htmlText Etiquetas y atributos no reconocidos Formatear texto con la clase StyleSheet Limitaciones notables en las hojas de estilo en ActionScript Formateo de texto con una hoja de estilo creada en el programa Selectores de clase Formatear etiquetas XML con CSS Formateo de texto con una hoja de estilo cargada externamente Fuentes y presentación de texto Incrustar fuentes outline en la herramienta de autoría Flash Fuentes outline incrustadas en Flex Builder 2 y en mxmlc Formateo de texto con una fuente incrustada Utilizar negrita y cursiva con fuentes incrustadas Cargar fuentes en el runtime Fuentes y tipogramas ausentes Determinar la disponibilidad de la fuente Determinar la disponibilidad del criptograma Presentación de texto incrustado Torcer el presentador FlashType Entradas de campos de texto Entrada de texto Formatear la entrada del usuario Selección de texto Vínculos de hipertexto Campos de texto y la herramienta de autoría Flash Cargando... Espere por favor... Capítulo 28. Carga externa de recursos visualizables Utilizar Loader para cargar recursos visualizables de carga en el runtime Creación de la instancia Loader Especificar la localización del recurso Comenzar la operación de carga Acceso a un recurso cargado Visualizar el recurso cargado en la pantalla Visualizar el progreso de carga ¿Por qué no utilizamos Event.OPEN? Manejo de Errores de carga Comportamiento de entorno para fallos de carga Depuración con HTTPStatusEvent Comprobación de tipo en la compilación de los recursos cargados en el runtime Opción de comprobación de tipo en la compilación Dar acceso al compilador para acceder a la clase cargada. Añadir el fichero de clase Module a la ruta fuente de Main.swf Añadir el fichero clase de Module en la ruta librería de Main.swf Añadir el fichero clase Module a la ruta librería externa de Main.swf Acceso a los recursos en fichero .swf multiframe Instanciar un recurso cargado en el runtime Instanciar un fichero .swf cargado Instanciar una imagen cargada Utilizar un socket para cargar recursos visualizables en el runtime Servidor: enviar el recurso Cliente: recibir el recurso Creación y conexión al socket Situar los bytes en un buffer Crear un recurso visualizable desde los bytes cargados Eliminar recursos de .swf cargados en el runtime Incrustar recursos visualizables en la compilación Una nota sobre el tamaño del fichero y la consumición de memoria Sintaxis genérica [Embed] Tipos de recursos soportados Incrustar imágenes bitmap Incrustar SVG Incrustar ficheros .swf completos Incrustar símbolos del legado de los ficheros .swf Incrustar ficheros como datos binarios Usar getDefinition() para acceder a una clase en un fichero .swf incrustado Un ejemplo [Embed] Limpiar el proyecto para ver los cambios ¡A la parte 3! Parte III. Construcción de una página Web Capítulo 29. ActionScript y Flash El documento Flash Secuencias y fotogramas Fotogramas clave y fotogramas normales La clase del documento Definiciones de variable y función en los fotograma script Símbolos e instancias Tipos de símbolos Símbolos de clip de película Clases vinculadas para símbolos de clip de películas Acceder a instancias de símbolos creadas manualmente Nombres de instancia Concordar variables para los nombres de instancia Acceder a textos creados manualmente Control de la secuencia programado Instanciar símbolos de Flash a través de ActionScript Nombres de instancia para objetos visualizables creados en el programa Vincular múltiples símbolos a una sola superclase La alternativa basada en la composición a las clases vinculadas Clases precargadas A continuación: utilizar el Flex fotogramawork Capítulo 30. Una aplicación MXML básica El enfoque general Creamos el proyecto Flex Crear el punto de entrada de la aplicación Provocar el punto de entrada de la aplicación Un ejemplo de un componente UI real Compartir con los amigos Capítulo 31. Distribución de una librería de clase Compartir ficheros fuente de clase Distribuir una librería de clase como un fichero .swc Crear una librería de clase basada en .swc en Flex Builder 2 Utilizar una librería de clase basada en .swc en Flex Builder 2 Crear un librería de clase basada en .swc en la herramienta de autoría Flash Utilizar una librería de clase basada en .swc en la herramienta de autoría Flash Distribuir una librería de clase como un fichero .swf Crear una librería de case basada en .swf en Flex Builder 2 Compilar un fichero .swf utilizando mxmlc Utilizar una librería de clase basada en .swf en Flex Builder 2 Crear una librería de clase basada en .swf en la herramienta de autoría Flash Utilizar una librería de clase basada en .swf en Flash CS3 ¿Pero se ha terminado de verdad? Apéndice. El zoo virtual fin alfabético