ContenidoPró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
Configurar el índice fotograma
Índice de fotograma designado frente al índice 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
Efecto del índice frame en las animaciones Event.ENTER_FRAME
Animación con el evento TimerEvent.TIMER
Efecto del índice 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 final
Índice alfabético