juegos en flash

44
INTRODUCCION Se siente como hace siglos desde que comenzó el viaje de escribir este libro. En su primer año, más de 4500 copias se vendieron, y su recepción superó mis expectativas. Estoy agradecido a todos los que lo compran y también a los que se tomaron el tiempo para difundir el mensaje a otras personas. Dado que la tecnología se desarrolla a un ritmo tan implacable, sin embargo, el trabajo de un buen autor nunca es terminada. En esta edición revisada del libro, usted encontrará la mayor parte del mismo material de la original (aunque algunos de ellos ha encontrado un lugar en línea perma-nente), así como lo que espero es cobertura nueva y emocionante-tura de más temas avanzados como el desarrollo para dispositivos móviles. El desarrollo del juego es un extraño híbrido de muchas habilidades y estilos de fusión. Se puede argumentar que los juegos son la forma más complicada de entretenimiento para crear. No sólo requieren un diseño sólido de codificación, atractivo, y el sonido decisiones interfaz de usuario, sino también los mejores juegos de todos comparten un aspecto particular: son divertidos para jugar. Este "factor diversión" puede ser especialmente difícil porque es muy subjetivo. Diferentes géneros de juegos de apelar a diferentes personas en diferentes ámbitos de la vida. Muy pocos juegos, en su caso, van a apelar a todo el mundo, en todas partes, todo el tiempo. Dicho esto, el tipo más popular de juego para los jugadores en Internet son los que han sido denominados "casuales" de juegos. Si no está familiarizado con esta frase, los juegos casuales tienen el propósito de atraer a una amplia audiencia y el enfoque en la simplicidad y accesibilidad sobre la profundidad y el realismo. Esto no quiere decir que algunos juegos casuales no son profundos y realistas, pero el público de una simulación táctica complicada en una consola es muy diferente de alguien matando a 10 minutos a la hora del almuerzo en su trabajo. juegos casual puede caer en cualquier número de géneros, desde juegos clásicos de estilo arcade como Pac-Man a los juegos de puzzle y lógica como el Tetris. De hecho, tanto de los títulos que acabo de mencionar tienen una cosa en común: ambos son productos de una era en el desarrollo de juegos (a partir de la década de 1970 hasta mediados del decenio de 1980), cuando el enfoque no era el espectáculo y gráficos de calidad cinematográfica y de audio, sino en la creación de juegos que son divertidos en primer lugar para jugar. JUEGOS EN FLASH Porque has elegido este libro, supongo que usted no está sólo interesado en crear un juego, pero que desea construir en Flash. Flash es una excelente plataforma para los juegos en desarrollo, especial-mente los juegos casuales para la Web. El tamaño del archivo y el poder del plug-in, en combinación con el 98% de instalar la base de todo el mundo, lo convierten en una opción inteligente para conseguir los juegos vistos por la mayor audiencia posible. Históricamente, algunos juegos en Flash se han considerado como glitchy, carente de esmalte, y en general de gama baja. Eso está cambiando rápidamente, sin embargo, como los juegos flash son cada vez más sofisticados y acercarse a los juegos "tradicionales" de computadora y video. CUAL VERSION DE FLASH USAR Siento que también debería tener un momento para hablar acerca de las versiones de Flash. La primera edición de este libro fue diseñado para su uso con Flash CS4. En ese

Upload: juan-c-reyes-c

Post on 05-Jul-2015

635 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Juegos en Flash

INTRODUCCION

Se siente como hace siglos desde que comenzó el viaje de escribir este libro. En su primer año, más de 4500 copias se vendieron, y su recepción superó mis expectativas. Estoy agradecido a todos los que lo compran y también a los que se tomaron el tiempo para difundir el mensaje a otras personas. Dado que la tecnología se desarrolla a un ritmo tan implacable, sin embargo, el trabajo de un buen autor nunca es terminada. En esta edición revisada del libro, usted encontrará la mayor parte del mismo material de la original (aunque algunos de ellos ha encontrado un lugar en línea perma-nente), así como lo que espero es cobertura nueva y emocionante-tura de más temas avanzados como el desarrollo para dispositivos móviles.El desarrollo del juego es un extraño híbrido de muchas habilidades y estilos de fusión. Se puede argumentar que los juegos son la forma más complicada de entretenimiento para crear. No sólo requieren un diseño sólido de codificación, atractivo, y el sonido decisiones interfaz de usuario, sino también los mejores juegos de todos comparten un aspecto particular: son divertidos para jugar. Este "factor diversión" puede ser especialmente difícil porque es muy subjetivo. Diferentes géneros de juegos de apelar a diferentes personas en diferentes ámbitos de la vida. Muy pocos juegos, en su caso, van a apelar a todo el mundo, en todas partes, todo el tiempo.Dicho esto, el tipo más popular de juego para los jugadores en Internet son los que han sido denominados "casuales" de juegos. Si no está familiarizado con esta frase, los juegos casuales tienen el propósito de atraer a una amplia audiencia y el enfoque en la simplicidad y accesibilidad sobre la profundidad y el realismo. Esto no quiere decir que algunos juegos casuales no son profundos y realistas, pero el público de una simulación táctica complicada en una consola es muy diferente de alguien matando a 10 minutos a la hora del almuerzo en su trabajo. juegos casual puede caer en cualquier número de géneros, desde juegos clásicos de estilo arcade como Pac-Man a los juegos de puzzle y lógica como el Tetris. De hecho, tanto de los títulos que acabo de mencionar tienen una cosa en común: ambos son productos de una era en el desarrollo de juegos (a partir de la década de 1970 hasta mediados del decenio de 1980), cuando el enfoque no era el espectáculo y gráficos de calidad cinematográfica y de audio, sino en la creación de juegos que son divertidos en primer lugar para jugar.

JUEGOS EN FLASHPorque has elegido este libro, supongo que usted no está sólo interesado en crear un juego, pero que desea construir en Flash. Flash es una excelente plataforma para los juegos en desarrollo, especial-mente los juegos casuales para la Web. El tamaño del archivo y el poder del plug-in, en combinación con el 98% de instalar la base de todo el mundo, lo convierten en una opción inteligente para conseguir los juegos vistos por la mayor audiencia posible. Históricamente, algunos juegos en Flash se han considerado como glitchy, carente de esmalte, y en general de gama baja. Eso está cambiando rápidamente, sin embargo, como los juegos flash son cada vez más sofisticados y acercarse a los juegos "tradicionales" de computadora y video.

CUAL VERSION DE FLASH USARSiento que también debería tener un momento para hablar acerca de las versiones de Flash. La primera edición de este libro fue diseñado para su uso con Flash CS4. En ese

Page 2: Juegos en Flash

momento, Flash CS4 había estado fuera por casi un año, y que tenía sentido para hacer que la versión de su elección. En la primavera de 2010, Adobe lanzó Flash CS5, que este libro utiliza principalmente como la herramienta por defecto. Todos los ejemplos, excepto los dos juegos para móviles al final se puede abrir en CS5 y no necesitan nada más (e incluso las que técnicamente puede-más en un momento en que). A lo largo de la escritura de este libro, también he estado en la beta para CS5.5, debido a ser puesto en libertad por el tiempo este libro aparece en las tiendas. Debido a esto, sentí que sería negligente de mi parte no incluye alguna mención de las características específicas en CS5.5. Para el resto de este libro, voy a llamar a áreas específicas, donde CS5.5 nuevos flujos de trabajo ha introducido u opciones que le hará la vida más fácil. Además, CS5.5 limpia varias de las opciones de flujo de trabajo descuidado para Android y el desarrollo IOS que existe en CS5, por lo que se muestran imágenes de CS5.5 porque va a ser el modelo en el futuro. Los ejemplos en los capítulos 15 y 16 pueden ser tanto técnica creada con CS5 (con algunas adicionales hacia abajo las cargas desde el sitio Web de Adobe), pero el rendimiento, opciones y facilidad de hacer uso de las herramientas en CS5.5 un tanto mejor elección.

Cómo sacar el máximo provecho de este libro

Este libro además implica o bien que tiene al menos intermediarios-comió experiencia con Flash (CS5, 5.5, o una versión anterior) como un ani-mación o una herramienta de creación de sitios Web, o que usted está entrando en Flash con la experiencia de desarrollo de juegos en otro plataforma. El propósito de este libro no es enseñar el uso básico del entorno de Flash desde el principio-que se ha hecho muchas veces por otros autores expertos e instructores. Más bien, espero que para cuando termine de leer este libro, usted se sentirá totalmente cómodo hacer frente a un juego en Flash.La primera parte de este libro se discuten muchas de las terminologías y conceptos básicos que necesita para entender sobre el juego de desarrollo, así como la forma de un mapa de un juego de principio a fin en una sola página. En la segunda parte, vamos a discutir la gestión de activos de audio y vídeo en Flash, la lógica del juego (incluyendo la disección de un guión de juego completo en sus componentes básicos), y las formas de su arquitecto juegos para ahorrarle dolores de cabeza más adelante. Voy a compartir lo mejor algunas prác-ticas para el código y la organización de la biblioteca.Un problema en Flash por lo general puede ser diseccionada de muchas maneras, y los juegos no son una excepción. A veces, las fuerzas externas (cli-padres, plazos, etc) dictará un enfoque sobre otro. La tercera parte tendrá lo que ha aprendido de la primera mitad del libro y aplicarlo en una serie de escenarios del mundo real, que muestra cómo no tienen que sacrificar los ideales de sonido del juego de desarrollo sólo porque su línea de tiempo se reducir a la mitad.Por último, en esta nueva edición, veremos Flash en un conjunto móvil-ting y cómo optimizar para ese medio. Los ejemplos que se dis-discutir tanto el empaquetador para el iPhone, así como el despliegue de juegos en AIR para Android.

Recursos en el Sitio Web

En el sitio Web de compañía de este libro, www.flashgamebook.com, usted encontrará un grupo de recursos para ayudarle, tanto en el seguimiento de los ejemplos más adelante en el libro y en la creación de su propio trabajo original. Todo el código fuente de los ejemplos que comparto no está disponible, así como varios capítulos de la primera edición

Page 3: Juegos en Flash

que se han "retirado" de la página impresa. El sitio también proporciona una forma de lectores como usted para hacer preguntas y recibir actualizaciones y aclara-ciones en que sea necesario. Asegúrese de que echa un vistazo a medida que lee y después de terminar de leer el libro.

CAPITULO 1

Un Poco De Cimentación

Antes de llegar demasiado lejos en Flash, es importante sentar las bases para el desarrollo del juego, por lo que entender la terminología que se usará durante el resto del libro. Refiérase a este capítulo, cuando se le olvida lo que un término medio o la forma en que se aplica en una situación particular. Si usted comienza a sentirse un poco abrumado por todas las palabras y conceptos abstractos, no se preocupe! El desarrollo del juego (en particular, eficiente, bien ejecutado de desarrollo) es complicado, y no hay nada malo en admitirlo. Recuerden que toda persona que ha programado un partido ha sufrido las mismas angustias y dudas. Como todo en la vida, se requiere práctica y experiencia del mundo real para alcanzar la competencia en el desarrollo del juego. Así que coge una taza de su bebida favorita cafeína infusa, y vamos a empezar!

Los tipos más comunes del juego

Hay muchos tipos diferentes de juegos (y algunos juegos que se enorgullecen de no poder clasificar fácilmente), pero la mayoría se pueden clasificar en uno de los siguientes géneros.

Aventura

Los juegos de aventura al estilo típicamente historia impulsada y tener uno o más personajes centrales. Estos juegos son percibidas como las películas más (algunos han sido conocidos por tener el presupuesto de producción de uno) y se basan en gran medida en el diálogo, la exploración y la lógica pro-blema solución para mover el jugador a través de la narración. Los juegos de aventura eran especialmente populares durante la década de 1980 y principios de 1990, con LucasArts y Sierra producir algunos de los mejores ejemplos del género. Este tipo de juego ha tenido un resurgimiento de la clase en Flash debido a su línea de producción de arte basada en los requisitos del sistema y generalmente más bajos.

CapturetheCubeGame.—MountainDewFigure1.1

Page 4: Juegos en Flash

Acción

Esta categoría abarca un gran número de perspectivas de juego-tivos y subgéneros, pero por lo general los juegos de acción consisten en pruebas de destreza de los jugadores, tiempo de reacción y rápida wittedness bajo presión. Tiradores en primera persona, laterales y de los juegos de desplazamiento vertical, y los juegos de lucha toda la caída en el género de acción. Flash se presta muy bien a algunos de los subgéneros de esta categoría, en particular los juegos de acción estilo retro, como el Space Invaders o Super Mario Brothers.

Puzzle

Piense Tetris, Bejeweled, Sudoku, y la lista continúa. Los juegos que implican la lógica, resolución de problemas, coincidencia de patrones, o la totalidad de la caída anterior en este tipo de juego. Flash prospera en este género durante un par de razones. En primer lugar, por lo general hay una menor cantidad de arte necesarios para un juego de rompecabezas simple, es decir, los desarrolladores individuales a menudo se puede hacer ellos mismos. En segundo lugar, la audiencia principal de juegos casuales en la Web tiende a ser mayor y apreciar el ritmo generalmente lento de los juegos de puzzle.

Juegos de palabras

Esta categoría podría ser considerado un subgénero del rompecabezas, pero el enfoque a la construcción de ellos puede ser bastante diferente que pensé que merecía su propio espacio. Búsquedas por palabras, crucigramas, juegos de ortografía, y anagramas todos pertenecen a este género. Flash es un medio popular para juegos de este tipo, por las mismas razones, es para los juegos de rompecabezas y otros.

Figure1.2 Reserved.www.blockdot.com.Blockdot,Inc.AllRights2009,©Raidiux

Page 5: Juegos en Flash

Figure1.3 Reserved.www.blockdot.com.Blockdot,Inc.AllRights2009,©JinkyPOP

Figure1.4 blockdot.com.Inc.AllRightsReserved. www.2009, Blockdot, ©and Ogre The Maiden ,Monk,

Estrategia y Simulación

Estoy engañando un poco a la combinación de estos dos géneros en una sola, pero comparten una serie de rasgos comunes. Una planificación cuidadosa, la gestión de recursos y toma de decisiones, tales como la planificación urbana o la creación de un gran ejército, caracterizan los juegos de estrategia. El nivel de las minucias se espera que el jugador a mantener por lo general define una estrate-gia o juego de simulación. Algunos juegos son tan complejos como para permitir que todas las opciones posibles a disposición del jugador para ser microgestión.Juegos de estrategia más casuales, como la mayoría creados en Flash, simplificar el juego, reduciendo el número de opciones disponibles y se centra en un par de las principales tareas. Un ejemplo muy conocido del subgénero estrategia de juegos casual es la torre de defensa, donde el jugador debe dejar de enemigos de conseguir más allá de sus defensas con una variedad de diferentes armas colocadas estratégicamente.

Juego de rol (RPG)

Juegos de rol son similares a los juegos de aventura, pero normalmente se define más por el crecimiento de la protagonista a lo largo de la historia del juego. Tradicionalmente, los juegos de rol tienen lugar en un escenario de fantasía y se centran en la elaboración

Page 6: Juegos en Flash

de estadísticas del jugador, tales como la mejora de los rasgos tales como fuerza, inteligencia, agilidad. La reciente encarnación más popular de estos juegos ha sido en los juegos de rol en línea masivamente mul-tiplayer (MMORPG), donde los jugadores compiten contra y colaborar entre sí para desarrollar sus personajes. Debido a los aspectos sociales y basados en Internet, algunos MMORPGs Flash han comenzado a surgir. Sin embargo, estos juegos suelen ser costosos y tienen largos ciclos de desarrollo, lo que las empresas más arriesgadas para las empresas y factible para desarrolladores individuales.

Vehículo Juegos

Estos juegos son bastante explica por sí mismo, sino que giran en torno a la operación de un vehículo en tierra, en agua, en el aire, o en el espacio. Tradicionalmente, estos juegos se juegan a partir de una primera o en tercera persona perspectiva de alcanzar un sentido de realismo. Debido a los requisitos del sistema y la complejidad de la construcción de un entorno completamente en 3D en Flash, la mayoría de juegos casuales en esta función de género a fin de juego en dos dimensiones.

Junta / juegos de cartas

Por lo general, una encarnación digital de un juego en el mundo real, esta categoría puede consistir en juegos como el ajedrez, damas, blackjack y póker. Debido a los requisitos del sistema de baja, Flash es una gran plataforma para la creación de la mayoría de tablero y juegos de cartas, como lo demuestra el gran número de sitios de juegos de casino en la Web.

Condiciones generales para el Desarrollo

La informática no es un campo difícil de estudiar y definitivamente para todo el mundo que simplemente quiere hacer juegos. Sin embargo, un conocimiento funda-mental de algunos de los conceptos básicos de programación ayuda más tarde, cuando estamos diseccionando una pieza del juego por pieza. Sí, es seco y tedioso en ocasiones suenan, pero prometo que cosas divertidas que seguir!

Figure1.5 Reserved.www.blockdot.com.Blockdot,Inc.AllRights2009,©TikiFreecell

Page 7: Juegos en Flash

Pseudocódigo

Pseudocódigo no es más que una explicación en lenguaje estándar de una serie de medidas programáticas, que es como un resumen de su lógica. A lo largo de algunos de los ejemplos de este libro, usted encontrará que a veces rompen la lógica en un juego en pseudocódigo antes de escribir cualquier real de ActionScript. Es fácil conseguir cogido también en la sintaxis de la programación y pasar por alto una falla en la lógica, por lo que casi siempre es más fácil de descomponer un problema en Inglés antes de abordar como código real. A menudo mi pseudocódigo se convertirá en la base de los nombres de mis funciones y propiedades.

Algoritmo

Un algoritmo no es más que una serie de instrucciones y las decisiones que definen la solución a un problema. No son código o lenguaje específico, y por lo tanto tienen sentido en la llanura Inglés. Por ejemplo, un algoritmo puede ser tan sencillo como el proceso que tiene lugar cuando un programa ordena una lista de palabras por su longitud. Esto es lo que podría parecer en pseudocódigo:

for all in wordlist! sort by length

sort by length (word A, word B)

! if A.length > B.length! ! return B ! else! ! return A

Procedimiento de programación

Muchos lenguajes de programación anteriores, tales como BASIC o Pascal, fueron lo que se conoce como lenguas de procedimiento. Usted puede pensar en ellos de manera abstracta como la programación de una lista de tareas o subprogramas. Se pueden realizar en cualquier orden, pero todos los comandos se dri-ven por un controlador de lógica principal, a veces referido como el "bucle principal." Los ejemplos de este libro será una combinación de técnicas de programación de procedimiento y de la clase siguiente, programación orientada a objetos.

Programación orientada a objetos (POO)

A diferencia de la programación de procedimiento, donde la atención se centra en un conjunto de tareas a ejecutar, programación orientada a objetos se centra en el concepto de "objetos" que interactúan entre sí. Programación orientada a objetos puede ser un tema muy complicado de entender plenamente, pero basta con decir que cada objeto es una entidad auto-contenida que tiene la definición de propiedades, puede enviar y recibir mensajes de otros objetos, y puede procesar su propia lógica interna. Por ejemplo, en programación orientada a objetos, una persona sería un objeto y su otro amigo. Las personas que comparten algunos componentes, tanto a las personas ser, pero también se

Page 8: Juegos en Flash

han carac-terísticas únicas a sí mismos. Se comunican entre sí a través de mensajes en un lenguaje común. Algunos de los aspectos de ActionScript trabajar de una manera orientada a objetos, y voy a cubrir los de longitud más adelante en este libro.

Patrones de diseño

Mucho se habla estos días en relación con los patrones de diseño en ingeniería de software. Hay muchas explicaciones largas, con libros enteros dedicados al tema en abstracto. A los efectos de este libro, pensar en un modelo de diseño como la plantilla para el código. Es el modelo por el cual se puede estructurar un juego a medida que se programa, en particular desde un enfoque orientado a objetos. Hay muchos aceptaron los patrones de diseño en la industria, algunos de los cuales funcionan bien para el desarrollo de juegos Flash, y otros que realmente no tienen un lugar aquí. En el capítulo 5, voy a hablar de los modelos más eficaces que he encontrado al trabajar en Flash y cómo ponerlas en práctica.

Clases

En programación orientada a objetos, las clases son piezas de código que actúan como bloques de construcción de objetos. Usted puede pensar en ellos como plantillas de la que todos los objetos utilizados en una aplicación se derivan. Una clase define todas las propiedades y funciones (conocidos como métodos) de un objeto. Utilización de las clases en Flash es importante por varias razones. En primer lugar, la definición de su código en las clases requiere que usted coloque una planificación más en cómo estructurar su juego. Esta es una buena cosa, no tiene planos claramente definidos lleva a adivinar y la duplicación del trabajo más tarde. Si un carpintero fue a construir una casa sin planos del arquitecto que no sea un solo dibujo, que bien podría dejar de fumar o tener que improvisar continuamente a lo largo del camino. El resultado sería una casa muy inconsistente, posiblemente inhabitable. Voy a cubrir la estructura de clases extensamente más adelante, ya que la mayoría o la totalidad de nuestro desarrollo se centrará en su uso. Mientras tanto, aquí es un ejemplo de una clase simple definición de un jugador en un juego.

package { !! import flash.display.MovieClip; ! public class Player extends MovieClip {

! ! public const jumpHeight:Number=10;//pixels ! ! public const speed:Number=15;//pixels per second

! ! public var health:Number=100;//percent ! ! public var ammo:int=20;//units! ! public function Player() {//initialization! ! }! } }

Page 9: Juegos en Flash

No todos los códigos puede tener sentido en este momento, pero espero que se puede ver que acabamos de definir un personaje jugador con una altura de salto predecesor-y una multa de velocidad de movimiento, y las variables de la cantidad de munición y de salud que tiene. Por supuesto, esto poco de código por sí sola no hará nada, pero crea una base sobre la cual construir una mayor funcionalidad y características.

Public, Protected, Private, and Internal

Los cuatro prefijos que usted puede dar a las propiedades y funciones dentro de sus clases, también conocido como atributos, definir qué artículos están disponibles de una clase a otra. Todos ellos están documentados en los archivos de ayuda de Flash, pero aquí está un breve resumen:

• Los métodos públicos (public) y las variables son accesibles desde cualquier lugar y son la base de cómo las clases interactúan entre sí, cuando una clase se extiende a otro, todos los métodos públicos y las variables se heredan.• Los métodos protegidas(protected) y las variables son accesibles sólo desde el interior

de su clase y se hereda.• Los métodos y variables privadas sólo son accesibles desde el interior de su clase y no son heredados.• Los métodos de Interior y las variables son accesibles desde todas las clases dentro de

su paquete. No es un atributo de otro, conocido como estática, que puede trabajar con cualquiera de las otras cuatro mencionadas anteriormente. Cuando un método o variable es estática, sólo hay una copia de ese tema jamás se haya creado y se accede a través de la clase no directamente, los objetos creados a partir de la clase. En otras palabras, una propiedad estática denominada "versión" del juego de clase se puede acceder como Game.version. Si ha intentado acceder a él desde una instancia de la clase de juego, sería un error.

Condiciones específicas para el Desarrollo de Juegos

Ahora, pasamos a un desarrollo más interesante de terminología. Esta sección cubre los conceptos que vamos a aplicar directamente como crear juegos en los próximos capítulos.

Artificial Intelligence (AI)

AI se refiere genéricamente a un conjunto de decisiones lógicas que un programa puede hacer para imitar la toma de decisiones humanas. Amnistía Internacional puede ser muy simple (como tener el equipo mover la barra hacia la pelota en un juego de Pong) o extremadamente complejos (como tener enemigos de pato para la cubierta, entender cuando están en peligro, y reaccionar en consecuencia en Halo 2). Para nuestros propósitos en este libro, y ya que Flash no sería capaz de manejarlo de otra manera, la mayor parte de la IA se desarrolla será relativamente sencillo.

Game Loop (or Main Loop)

Este término se refiere generalmente al segmento principal de código que determina el próximo curso de acción para un juego basado en la información, Amnistía Internacional, o alguna lógica arbitraria. Por lo general, no es más que las llamadas a funciones de otras

Page 10: Juegos en Flash

piezas de la lógica y la comprobación para ver si ciertas condiciones se han cumplido (por ejemplo, si un jugador ha ganado).

Aquí está un ejemplo de pseudocódigo que describe un simple bucle principal de un juego:

on enter frame ! ! move player! ! move enemies ! ! check for collisions ! ! check for win or lose

En lenguajes como C, un bucle principal es, literalmente, un bucle de código (como un "tiempo" o "para" circular) que se ejecuta hasta que se cumple una condición. En algunos casos, esto también se conoce como la máquina del Estado, ya que es la lógica que determina el "estado" del juego se encuentra, antes del partido, dentro del juego, después del partido, etc, y realiza las funciones correspondientes. En ActionScript, se debe establecer de manera diferente debido a un bucle ordinario bloquear el reproductor Flash de espera para el juego hasta el final. Debido a su herencia de animación, Flash trabaja en el contexto de marcos, como una película. Tiene una velocidad de fotogramas, es decir, el número de fotogramas por segundo que puede ser definido. Cuando una trama pasa, Flash actualiza la pantalla, por lo que es el momento perfecto para realizar la lógica. Esto puede parecer extraño a los desarrolladores utilizar para otros idiomas, pero rápidamente se convierte en segunda naturaleza. Voy a hablar de los lazos juego más adelante, ya que serán la fuerza impulsora detrás de nuestro código del juego. En el capítulo 16, también trataremos el uso explícito de una máquina de estados finitos (uno con un número finito de estados predefinidos).

Juego Vista (Game View)

Un juego puede tener lugar de cualquier número de puntos de vista-a menudo el género de un juego que define el fin de usar, pero no necesariamente. Muchos juegos de acción moderna son de primera o de puntos de vista en tercera persona, en los que usted ve el mundo del juego desde la perspectiva de tu personaje o justo detrás de ellos. Una acción más casual y juegos de aventura utilizan puntos de vista desde el lado. Otros géneros como la estrategia o las carreras pueden ver la acción desde arriba. Parte de lo que hace que un juego atractivo y divertido de jugar es la vista que elija a emplear. Un juego de acción con mucho movimiento rápido y obstáculos sería difícil y sin brillo de una vista a vuelo de pájaro, pero desde una vista en primera persona, tiene una inmediatez e intensidad que suspende el jugador disbe-creencia. Algunos puntos de vista del juego en Flash funcione mejor que en otros. La mayoría de las opiniones participación de un entorno de tres dimensiones no va a funcionar bien dado Flash limitaciones de rendimiento tecnológico, pero hay trucos y técnicas que hablaremos más adelante que puede ser utilizado para "simular" en 3D de una manera convincente.

Desplazamiento (scrolling)

A menudo, el medio ambiente de un juego se extiende más allá de su área visible. Por ejemplo, en Super Mario Brothers, el mundo del juego se extiende durante cierta distancia, pero sólo una pequeña parte se puede ver a la vez. Debido a esto, el juego se

Page 11: Juegos en Flash

desplaza horizontalmente hacia atrás y adelante con el jugador mantiene en el área de visualización principal. Este mismo efecto se puede utilizar tanto horizontal como verticalmente para los juegos de conducción, juegos de estrategia, etcUna técnica para dar un entorno de juego de desplazamiento más profundidad y aspecto tridimensional es tener varias capas del medio ambiente desplazarse a diferentes velocidades. Esta técnica se conoce como paralaje desplazamiento. Al igual que en el mundo real, los objetos que parecen estar en la distancia, tales como montañas o edificios, puede desplazarse a una velocidad más lenta que los objetos en primer plano. Vamos a discutir un ejemplo de la animación de desplazamiento lateral en el capítulo 7.Juegos de piezas basada enAlgunos entornos de juego puede ser dividido en una cuadrícula, como un laberinto o juego de estrategia. La obra de arte para el juego se puede cre-serie ATED como los azulejos de un tamaño predeterminado. Aunque se requiere más trabajo en el extremo de programación para desarrollar un sistema eficiente de asignación de tejas, se abre a los juegos a la creación de un editor de niveles para que los usuarios finales crear mapas personalizados. Starcraft y Warcraft son dos juegos de estrategia que disponen de muy bien implementado sistemas de revestimiento con los editores. Veremos un motor de juego de fichas basado en el Capítulo 14.

Flash Términos de Desarrollo (Flash Development Terms)

Antes de terminar este capítulo, he aquí un puñado de términos que voy a continuar con-para referirse a todo el libro. Entender la forma en cada una de estas obras los artículos serán clave para arquitectura de código del juego de sonido en el camino. En el capítulo 4, vamos a profundizar en estos conceptos aún más en profundidad, pero esto servirá como un resumen rápido.

STAGE

En Flash, el escenario es el área de contenido principal en la que todo está construido. Todos los objetos visuales otros se colocan en la parte superior del escenario una vez que se han añadido a la misma. Piense en ello como la lona de su juego.

DISPLAY OBJECTS

Un objeto de visualización es cualquier objeto que tiene una representación visual y se puede colocar en el escenario. Hay muchos tipos diferentes de objetos de visualización en Flash, los más familiares a los desarrolladores con experiencia se botones, sprites y MovieClips. Incluso el propio escenario es un tipo especial de objeto de visualización. Los objetos de visualización todos comparten algunos rasgos comunes: todos ellos tienen una x, y y z posiciones en la pantalla, así como las propiedades de escala y rotación. Flash mantiene listas de todos los objetos de visualización en la pantalla en un momento dado, lo que facilita su acceso y manipular.

EVENTS AND LISTENERS

Los eventos son el medio principal de comunicación entre objetos en AS3. Son simplemente mensajes que los objetos en Flash puede transmitir o enviar. Cualquier objeto que se ha creado para escuchar las recibe eventos. Pueden ser las notificaciones de entrada del usuario, información sobre los datos externos que se carga, etc Flash incorpora múltiples en eventos

Page 12: Juegos en Flash

para las tareas comunes, y es perfectamente posible (y recomendable) crear otros nuevos para los objetos personalizados, como los juegos. Los eventos pueden llevar consigo cualquier cantidad de datos pertinentes a su tipo, pero todas ellas contienen propiedades básicas:• Un nombre o tipo• Un target: el objeto que distribuyó el evento• Un current target: El objeto que se está escuchando y/o manipulando el eventoLos eventos son una herramienta muy poderosa que vamos a hacer un uso extensivo de los capítulos más tarde.

PackagesUn paquete es una colección de clases y funciones, que se utiliza para fines de organi-zación. Debido a que hay diferentes clases de tantos construido en Flash, por no mencionar todas las clases vamos a crear, es importante mantenerlos agrupados en colecciones lógicas. Por ejemplo, las clases en Flash que tienen que ver directamente con los objetos de visualización en un paquete llamado flash.display. La mayoría de eventos se encuentran en el paquete flash.events. La convención de nomenclatura estándar para un paquete todo en minúsculas. Para utilizar las clases de un paquete en particular, se utiliza el comando de importación para acceder a ellos:

package mypackage ! ! { ! ! ! import flash.display.MovieClip;! ! ! public class MyClass() extends MovieClip ! ! ! { ! ! ! }}

Author Time, Compile Time, and RuntimeEstos términos se refieren a las diferentes etapas cuando los datos en Flash ha sido alterado o verificado. A lo largo del libro, voy a hacer referencia a cosas que suceden en el entorno de autoría de Flash, se trata de acontecimientos del tiempo del autor. Eventos o errores que se producen durante el proceso en el que Flash crea un archivo SWF que se conoce como eventos en tiempo de compilación. Por último, los eventos en tiempo de ejecución se producen una vez que un archivo SWF se ejecuta por sí mismo.

You Can Wake Up Now

¡Menos mal. Usted lo hizo! A pesar de que no puedan comprender plenamente los conceptos que he presentado aquí, usted comenzará a ver en el contexto de los capítulos más tarde y van a empezar a hacer clic. Basta pensar, ahora puedes colocar palabras como "polimorfismo" en una conversación informal y el sonido como un hecho y derecho ingeniero nerd, eh ... software!

Page 13: Juegos en Flash

CAPITULO 2

THE BEST TOOL FOR THE JOBFlash BackAdobe (anteriormente Macromedia originalmente FutureSplash) Flash ha existido por mucho tiempo y ha recorrido un largo camino desde sus humildes orígenes. A partir de Flash 4, los desarrolladores se les dio un impresionante (en el momento) conjunto de herramientas de scripting de lo que había sido principalmente una herramienta de animación ligero. Los primeros juegos comenzaron a aparecer en Flash 4 y continuó en Flash 7 con la introducción de la versión de ActionScript 2. Los desarrolladores de Flash pueden ahora el programa de una manera bastante orientado a objetos, aunque con algunas concesiones y caprichos.

Figure2.1 Flash5.previous versions, all the way Flash logos from back to

Un avance rápido hasta el último lanzamiento, CS5.5 Flash. Desde la versión CS3, los usuarios de Flash han tenido acceso a una versión nueva y poderosa del lenguaje: ActionScript 3 (AS3). Rediseñado desde los cimientos, AS3 mucho más sigue de cerca las normas y directrices de lenguajes de programación modernos (como Java o C #), con una hoja de ruta bien definida para una nueva funcionalidad en las versiones posteriores. Flash CS4 presenta características aún más sorprendentes para explotar juegos, tales como transformaciones básicas en 3D, cinemática inversa (para la manipulación de carácter realista), y un conjunto de herramientas de animación totalmente nuevo. En Flash CS5, Adobe entrega la posibilidad de implementarla en las plataformas móviles, un buen nuevo formato de archivo de control de versiones de usar, y una serie de mejoras de flujo de trabajo agradable para el IDE. CS5.5 ha seguido estas mejoras y fija una serie de problemas de estabilidad y flujo de trabajo con CS5.Dado que Flash CS5/5.5 es nuestro entorno de desarrollo de la elección, AS3 es lo que vamos a cubrir en este libro. Si usted todavía está haciendo la transición de AS2 a AS3, o aún no han comenzado, no se desalienta edad. Cuando un convenio de programación o la técnica ha cambiado significativamente desde AS2, lo voy a señalar a un lado. AS3 puede tomar algún tiempo para acostumbrarse, como algunos de su sintaxis ha cambiado drásticamente a través de AS2. Sin embargo, en poco tiempo, los cambios que se convertirá en segunda naturaleza y usted se preguntará cómo ha podido prescindir de algunas de las mejores características de AS3. Si ya tienes experiencia en el desarrollo AS3, que está un paso por delante y debe sentirse como en casa en la lengua. Y fuera de si viene de un desarrollo del juego de fondo de Flash, encontrarás algunas cosas familiares y algunas cosas muy diferentes de lo que estamos acostumbrados.

The Case for FlashLo primero que debe saber acerca de Flash es que nunca fue diseñado para desarrollar juegos. Hay una serie de características ausentes que hasta el día de hoy frustrar incluso un fan de Flash, como yo. Yo aún voy a esbozar estas huelgas en contra de ella en breve, pero primero vamos a ver lo que Flash ha estado haciendo.

Player Penetration

Page 14: Juegos en Flash

Aproximadamente el 98% de los usuarios de Internet tienen alguna versión de Flash Player, y por lo general dentro de un año de una nueva versión de su liberación, algo más del 80% han mejorado. El tamaño de la audiencia de acceso a los desarrolladores de Flash no tiene precedentes en la industria de los videojuegos. Debido a que está disponible en equipos que ejecutan Windows, Mac OS o Linux, también puentes entre las diferencias de todas las plataformas de los principales consumidores. La mayoría de los diseñadores de juegos y pers desa-que producen gran presupuesto, los títulos de minoristas tienen que conformarse con un mucho menor demográfica y tienen que tomar la decisión consciente (y con frecuencia costosos) para incluir otras plataformas de su objetivo principal. Esta ubicuidad se está propagando rápidamente a otros dispositivos, además de computadoras de escritorio, teléfonos y las tabletas de todas las formas y los tamaños están adoptando rápidamente varias versiones de Flash para mejorar la experiencia del usuario.

FlexibilityFlash es capaz de muchas cosas a la vez. Puede crear dibujos animados, efectos de postproducción, presentaciones, publicidad de banner-mentos, todo tipo de sitios Web, Web y aplicaciones de escritorio basadas en, y, por supuesto, juegos. Los desarrolladores utilizan Flash para todas y cada una de estas funciones, y algunos sólo pueden estar familiarizados con la tarea que uno ha aprendido a hacer. Debido a que es un entorno muy visual, Flash es mucho más accesible a los novatos que la mayoría de los paquetes de desarrollo. Por desgracia, esta inmensa flexibilidad tiene un precio. Al no estar diseñados específicamente para hacer cualquier cosa, Flash tiende a adoptar un planteamiento muy genérico a su conjunto de herramientas e incluye una funcionalidad que es útil para una serie de aplicaciones, no sólo un lugar. Puede crear herramientas adicionales, los guiones, los flujos de trabajo, etc, que le ayudará en su tarea específica, pero que todo depende de tu ingenio individual. Voy a cubrir algunas de estas adiciones en un capítulo posterior.

Speed to MarketFlash hace que muchas tareas, que requieren una gran cantidad de código en otros idiomas, mucho más fácil. Tareas, tales como animación simple, reproducción básica de vídeo y audio, son muy simplificado en Flash y permiten a los desarrolladores a llevar sus productos al mercado mucho más rápido que otras soluciones, con el poder sin duda más. Por ejemplo, debido a su herencia de animación, Flash hace que sea muy fácil de mostrar imágenes en la pantalla. Esto puede parecer una afirmación obvia, pero en comparación con otros entornos de desarrollo, esta es una gran ventaja. C + +, Java, y todo lo que hacen otros idiomas a la pantalla de programación, por lo que dibujar un simple rectángulo en la pantalla requiere de muchas líneas, muchos de valor de código. Todo lo que toma en Flash es la selección de la herramienta de rectángulo y colocar una en el escenario, o escribir unas pocas líneas de código ActionScript. Flash se encarga de hacer todo "bajo el capó", por lo que el desarrollador no tiene que preocuparse por ello. Bueno, no mucho de todos modos.

It Looks GoodAunque estoy seguro que todos hemos visto nuestra parte de contenido de Flash de aspecto horrible en los últimos años, algunos de los mejores de futuro y trabajar visualmente más eficaz que he visto en la Web fue creado en Flash. Debido a que Adobe es una empresa de diseño centrado, que están igualmente preocupados con las herramientas que permiten que su trabajo se vea bien ya que son las herramientas que la hacen funcionar bien. Esto tiene una tendencia a frustrar los diseñadores y

Page 15: Juegos en Flash

desarrolladores de los extremos de núcleo duro del espectro, pero es precisamente esta unión de la tecnología y el diseño que hace que Flash única.

Nobodyʼs PerfectPara todos los que Flash ha estado haciendo, no es ciertamente libre de problemas a la hora de producir juegos. No me malinterpreten, el punto de la enumeración de estas fallas es por lo que el desarrollador se dará cuenta de ellos, no para hacer un caso contra el uso de Flash en el primer lugar. La buena noticia es que la mayoría de estos inconvenientes se puede solucionar con las herramientas adecuadas.

Flaw: The Code EditorAunque el editor de Flash ActionScript ha ido evolucionando con el resto del paquete en los últimos años, aún carece de un puñado de las características fundamentales de diversión que me impide todo corazón lo recomiendo como la herramienta de codificación de la elección. La omisión más agravantes es en realidad una mala aplicación: sugerencias para el código. Al escribir código, Flash intenta anticipar lo que va a querer con el tipo que viene y le ofrece una lista seleccionable de opciones para tratar de acelerar el proceso. El problema es que sólo sugerencias para el código cuando se llega a la final de una palabra, así que si usted comienza a escribir mal una variable o función y no recibir una sugerencia para que, usted no tiene ningún indicador de donde salió mal. Con CS5, Adobe ha agregado la capacidad de introspección (mirar dentro) de clases personalizadas, pero el editor de código es todavía inferior a los dos productos de la competencia.

Solution: Use an Additional ToolLa solución más simple (y el que yo uso) a este dilema es utilizar una aplicación adicional para manejar todas sus ActionScript y el uso de Flash para todo lo demás. Los dos mejores opciones que hay a partir de esta escritura son FlashDevelop, un editor gratuito de código abierto de código, y Flash Builder (antes de Flex Builder), aplicaciones de codificación de Adobe-ción basado en Eclipse (otro editor de código abierto). Si estás en un presupuesto ajustado o no intención de utilizar el marco de trabajo Flex de Create contenido de Flash, FlashDevelop es una gran opción y lo que yo uso sobre una base diaria. Si desea crear contenido en Flex, o si ya posee una copia de Flash Builder, es una solución igualmente robusta con algunas características adicionales realmente grande, como "marcadores" de líneas de código que está activamente trabajando. El paso adicional de regresar a CS5 para publicar su SWF palidecen en comparación con el código sorprendentemente buena herramienta y otros scripts mejorar-mentos que ofrecen estos programas.

Page 16: Juegos en Flash

Figure2.2 The built-in ActionScript editor in Flash CS5.

Flaw: Performance/Memory Management

Dado que los juegos flash continuará creciendo en tamaño y complejidad, requieren más pesados de hardware para que funcione bien. La mayoría de otros entornos modernos de desarrollo incluyen herramientas para la evaluación comparativa de un juego con-sumo de los recursos del sistema como la potencia de la CPU y la memoria. Flash no tiene todas las características de este tipo, por lo que es más difícil de predecir sin pruebas del mundo real que tan bien un juego llevará a cabo en una serie de sistemas o cuáles son sus requisitos mínimos debe ser.

Solution: Use a Third-Party Solution or Roll Your OwnEl Administrador de tareas de Windows y el Monitor de actividad en un Mac son una gran herramienta a nivel de sistema que todo el mundo tiene para el control de la asignación de memoria y CPU de una aplicación dada. Desafortunadamente, no hay forma real de obtener el uso de la CPU exacta de un Juego en flash porque la mayoría de formas de las pruebas que implican que se ejecuta dentro de otro programa, como Flash CS5 o un navegador Web. Estos programas se pueden ejecutar otras tareas que consumen recursos del sistema, y es difícil saber dónde está el "contenedor " termina y comienza el juego. Dicho esto, a veces un enfoque más simple a este problema es más eficaz. Contenido de Flash está configurado para ejecutarse a una velocidad predefinida. Si el jugador se pone demasiado estancado, ya sea con el código o lo que está tratando de hacer a la pantalla, que traerá hasta la velocidad de fotogramas. Es muy fácil de usar un pequeño componente en su juego para controlar la velocidad de fotogramas de una máquina en particular está recibiendo. A continuación, puede utilizar esta información durante las pruebas para determinar el nivel mínimo de máquina, necesario para jugar su juego. Basta con establecer un nivel de tolerancia (por lo general superan el 85% de la tasa de fotogramas de un juego diseñado es aceptabilidad-ble) y, a continuación la nota que las máquinas están por debajo de esta tolerancia. Mem-teoría es un poco más expuestos en Flash, y hay maneras de determinar los puntos de estrangulamiento en su juego en el uso de la memoria va de las manos, aunque sí requiere escribir su propia utilidad. Esto se hace utilizando el paquete de muestrarios, y discutiremos la paquete, el componente de velocidad de cuadro, y otras optimizaciones en el capítulo 17.

Page 17: Juegos en Flash

Figure 2.3 The free code editor FlashDevelop.

Figure 2.4 The Activity Monitor on a Mac.

Flaw: Debugging ContentAdobe mejorado en gran medida el depurador de AS2 a AS3, pero todavía tiene una serie de defectos cuando se trata de trabajar con proyectos de mayor envergadura. Dado que los proyectos se hacen más grandes y más grandes y se basan en archivos externos, se hace difícil para la depuración de problemas complejos. Usted puede depurar de forma remota contenido que se ejecuta en un navegador, pero no siempre es 100% estable, y cualquier niño que los fondos soberanos no han sido exportados para la depuración (por ejemplo, archivos que tal vez no están bajo su control) no tendrá la información necesaria necesarios para encontrar el problema. He tenido el contenido que funciona bien dentro

Page 18: Juegos en Flash

de Flash y se deshace una vez que está en un servidor Web, cuyos resultados son una caza de errores en la oscuridad y un montón de rascarse la cabeza. Huelga decir que esto se hace aún más frustrante con los juegos, que depender tanto de los montones y montones de código.

Solution: Use Traces and Custom ToolsLa herramienta más útil en la depuración de contenido de Flash es el comando de seguimiento, sino que ha existido desde Flash 4 y trabaja esencialmente la misma manera que lo hizo hace tantos años. Todo lo que hace es mostrar toda la información que usted le indique en tiempo de ejecución. Esto se vuelve muy valiosa cuando se trata de ver algo tan complicado como un juego se ejecutan en tiempo real. Usted puede tener Flash trazar secuencias enteras de la lógica para determinar dónde se está produciendo un error, y se puede usar para enviar mensajes a otros desarrolladores que podrían estar trabajando con el código. Aunque las huellas de trabajo a través de la ventana de salida en Flash, es posible capturarlos dentro de Firefox usando una extensión llamada FlashTracer y la versión de depuración de Flash Player. Enlaces a ambos se pueden encontrar en el sitio Web de este libro. Funciona bien para la depuración general, pero cuando un juego funciona bien en Firefox, pero no otros navegadores web no será de ninguna ayuda. Otra opción es crear herramientas incluso más robusta que puede usar en cualquier ambiente. Vamos a estudiar la manera de crear y aplicar estas herramientas en el capítulo 17.

Flaw: Lack of Built-In Game Libraries and ToolsHasta este punto, las deficiencias de Flash que he descrito son los que afectan a los desarrolladores de todo tipo de contenido de Flash. Porque los juegos tienden a necesitar más conjuntos de herramientas específicas y se inclinan hacia el final del desarrollo a medida, Flash no tiene un número de bibliotecas de código que están fácilmente disponibles en otras plataformas. Ejemplos de este tipo de biblioteca puede ser un simulador de física para hacer realistas las colisiones físicas o un administrador de sonido que maneja fácilmente la decoloración / panorámica de efectos de sonido en tiempo real. Estas bibliotecas deben ser escritos desde cero, lo que significa que no se benefician de el aumento de velocidad de ser aplicado directamente en el interior de Flash.

Figure 2.5 The FlashTracer extension running inside Firefox 3.

Solution: Write Your Own/Find Open Source ImplementationsPor desgracia, hasta que Adobe añade las bibliotecas de juegos específicos para el reproductor de Flash, nos quedamos ahí, construir nuestra propia. Por suerte, muchos desarrolladores de Flash en la comunidad están trabajando para cualquiera de las bibliotecas del puerto, tales como los de otras lenguas o escritura sobre ellos desde el

Page 19: Juegos en Flash

principio en ActionScript. Muchos de ellos son proyectos de código abierto que cualquiera puede contribuir y mejorar. Hay enlaces a varios de estos en el sitio Web de este libro, e incluso a explorar una en el capítulo 16 para hacer la física 2D. Para ser justos con Adobe, hay una serie de nuevas capacidades venir en futuras versiones de Flash Player que ese apoyo características centradas en el juego como la aceleración 3D de hardware y las pastillas de control.

Stop Fighting Itlos desarrolladores de juegos tradicionales a veces tratan de luchar contra la naturaleza de Flash cuando por primera vez a hacer la transición, pero a menudo la mejor manera de obtener el resultado deseado de Flash es ser consciente de sus fortalezas. Tomemos, por ejemplo, un personaje en un juego que desea animar en función de su estado (en espera, correr, saltar, etc.) Un artista le ha dado secuencias de imágenes de cada uno de estos estados. La ca-rácter de estado puede ser controlado por la entrada del usuario con el ratón o el teclado, o por la IA. Un enfoque tradicional para este problema sería la de escribir un script que actualiza el personaje con la estructura correcta de animación basada en lo que el juego está diciendo que haga. Sin embargo, esto requiere la secuencia de comandos para saber cuántos animales-maciones hay, cuántos cuadros cada animación es, y si el bucle de animaciones o sólo juego una vez. También hay que añadir la nueva imagen al escenario y luego eliminar el anterior. Además, implica una sobrecarga de cualquier otro código se ejecuta en el juego, que puede llegar a ser problemático si usted tiene muchas características-tros en la pantalla a la vez.Este es un ejemplo perfecto de un ámbito en el Flash brilla sobre otras herramientas de desarrollo de juegos. Dado que el entorno está construido en torno al concepto de líneas de tiempo y la animación, usted tiene una cantidad tremendos de flexibilidad cuando se trata de estados jugador que lo controla, los estados del juego, o cualquier otro objeto en su juego que son más que una imagen fija. El truco está en saber lo que Flash es mejor y donde tiene que modificar su comportamiento.La otra cara de la moneda, el desarrollo del juego es que los juegos tienen el código: a menudo en grandes cantidades. Un juego totalmente construida en torno al arte de animación y la fantasía no es susceptible de ser muy interesante o reutilizable en una fecha posterior. Los usuarios que han construido previamente el contenido en Flash con secuencias de comandos muy poco pueden encontrarse en pánico al ver la cantidad de código que encontraremos en capítulos posteriores. Esto es normal, toma una respiración profunda. Desarrollo en Flash siempre ha sido un matrimonio de diferentes disciplinas, y los juegos son posiblemente el mejor ejemplo de esta idea. Cada tarea de Flash ha sido diseñado para hacer más fácil tiene aspectos que se traducen en el desarrollo del juego.

Things Flash Was Built to DoAnimation versus GamesPosiblemente más fuerte de Flash a cabo el uso de la caja es como una aplicación de animación. Al igual que los programas de post-producción (como Adobe After Effects) o multimedia, herramientas de autor (como Adobe Director), Flash se centra en el concepto de una línea de tiempo. De forma predeterminada, los eventos ocurren en un orden lineal, y objetos en la línea de tiempo puede tener líneas de tiempo anidadas dentro de ellos. Esto permite animaciones muy complejo que se construirá con relativa rapidez.Pensemos por un momento una animación de un personaje caminando. Con el fin de parecer convincente, todos los apéndices del personaje tendría que ser separados y animación de forma independiente. Además, es necesario que se mueven por el escenario para que el personaje no es sólo caminar en su lugar. Para mover todas las

Page 20: Juegos en Flash

piezas a la velocidad adecuada sería muy engorroso y lleva mucho tiempo. En cambio, con líneas de tiempo anidadas, la secuencia de caminar puede ser contenido dentro de un clip que se mueve a un ritmo diferente en el escenario. Aunque este concepto no es nada nuevo para cualquiera que esté familiarizado con Flash, que habla de una jerar-quía que será muy útil más adelante.

Application versus GamesAunque comenzó como una herramienta de animación, Flash se ha convertido en una serie de otros usos. Desde las últimas versiones de algunos de Flash, Adobe ha iniciado la comercialización de la misma (junto con Adobe Flash Builder) para crear lo que se conoce como Rich Internet Applications (RIAs). En resumen, los acuerdos regionales son las aplicaciones que realizan tareas de lo que eran tradicionalmente de escritorio enlazados desde la Web. Pueden ser cualquier cosa desde aplicaciones cesta de la compra de software de facturación a un widget de pronóstico del tiempo. Para proporcionar la flexibilidad y para que el desarrollo rápido de este tipo de software posible, Adobe incluye una serie de componentes, piezas prefabricadas de código diseñado para su fácil reutilización. Estos componentes son elementos tales como barras de desplazamiento, cuadros de texto, botones de radio, los dispositivos se pueden ver en una página típica web en HTML. Aunque estos componentes son ideales para aplicaciones RIA, sirven poco uso directamente en los juegos (aunque yo te mostraré más adelante cómo se puede ser muy útil en las herramientas que ayuda al desarrollo del juego).Podría decirse que un juego es una aplicación, ya que realiza ciertas funciones sobre la base de entrada del usuario. Sin embargo, una solicitud en el sentido tradicional se utiliza para crear algo o entregar la información; recibe la entrada y le da salida. Las directrices para produ-ciación una aplicación como un procesador de texto son muy diferentes de los utilizados para crear un juego. Esto debe ser entendido para no tratar de desarrollar juegos como lo haría con cualquier número de otras aplicaciones. Aunque las aplicaciones tienden a ser utilizados para la pro-dad, los juegos son utilizados para el entretenimiento, o en algunos casos, la educación-ción. Los juegos son la experiencia, sino que establece un tono y crear un ambiente para que el usuario tenga la diversión (o de vez en cuando enseñan un concepto o hacer un punto).

Web Sites versus GamesOtra área en la que Flash ha florecido en el sitio web de desarrollo. He empezado a utilizar en una agencia de publicidad, la creación de sitios web de marca para los clientes. Flash incluye muchas características para trabajar en la Web, incluyendo soporte de streaming de los contenidos, la capacidad de carga de datos desde una variedad de fuentes externas, y por supuesto, su reproductor basado en navegador que coloca el contenido de Flash junto con cualquier otra cosa en HTML. Al igual que los juegos, sitios web tienden a basarse en la experiencia, pero también son por lo general la intención de ser informativos. Cuando están destinados exclusivamente para el entretenimiento, que puede parecerse a un juego en muchos niveles, por debajo de la puntuación o el resultado basado en la realización. De hecho, debido a las similitudes en la forma de cada tipo de contenido se produce, la línea entre Flash y sitios Web de juegos anidado en su interior se ha vuelto muy borrosa.

Flash versus Traditional Game DevelopmentTrabajar con los desarrolladores de juegos procedentes de un fondo como C o Java ha sido una experiencia muy linda, muchos aspectos del flujo de trabajo de Flash que me dan por hecho son verdaderas piedras de tropiezo a los forasteros. En primer lugar, los

Page 21: Juegos en Flash

desarrolladores de juegos tradicionales tienden a mantener todo el código de un juego y todos los activos (arte, sonidos, vídeo, etc) separados por completo. El código define lo que los activos se cargan y cómo se utilizan. En Flash, la forma estándar de gestión de activos es para la importación en un archivo de biblioteca única. Para utilizar un activo, sólo tiene que arrastrarlo al escenario y comenzar a trabajar con él, o le das un nombre que se puede hacer referencia más adelante en el código. Esta interdependencia de código y de los activos ha sido a menudo de una crítica dirigida contra los desarrolladores de Flash más tradicionalistas, como el código demasiado atado a los activos específicos, puede resultar duro para su posterior reutilización. Aunque hay algo de verdad en esta afirmación, hay maneras (que vamos a cubrir más tarde) para utilizar las comodidades de la gestión de activos de Flash con gran parte del código reutilizable.

The Best Tool for the JobTal vez una de las mayores fortalezas de Flash es el hecho de que hay formas sin duda tantos para lograr el mismo objetivo final. Hay procesos definitivamente mejor y peor en el camino, y en los capítulos que vienen, voy a esbozar lo que he encontrado que funciona constantemente y lo que debe evitar.

Flash CS5 versus Flash BuilderAdobe Flash Builder es una herramienta para la creación de contenido de Flash fuera del entorno CS5, basado en un marco predefinido de componentes y diseño de un lenguaje similar al HTML. Se destaca la creación de aplicaciones RIA con rapidez. Fue concebido para tratar de ganarse a los desarrolladores de Flash desde plataformas como Java o. NET. Flash CS5 se destaca en términos de gráficos de animación y movimiento capacidades, mientras que Flash Builder brilla como una herramienta de programador. Se trata de un editor de código de circulación y tiene muchas características que hacen los programadores tradicionales se sienten como en casa, ya que se basa en el popular IDE de Eclipse. La razón principal por la que optó por cubrir CS5 Flash en lugar de Flash Builder como mi entorno de desarrollo de elección es la que me siento Flash es simplemente un medio ambiente mejor para aprovechar al máximo los juegos. No hay un equivalente que se encuentran en Flash Builder para conjunto de herramientas de animación de Flash, pero Flash puede ser aumentado y se utiliza conjuntamente con otras herramientas como Flash Builder para compensar las deficiencias de su código. La otra razón para usar Flash Builder es el Flex Framework, un conjunto de clases para crear fácilmente y despellejar a RIA utilizando un lenguaje de marcado llamado MXML, y le agrega volumen considerable para sus proyectos que de ninguna manera el desarrollo del juego los beneficios. Véase más arriba con respecto a los editores de código alternativo para Flash.

CAPITULO 3

A PLAN IS WORTH A THOUSAND ASPIRIN

He construido una gran cantidad de juegos en Flash con los años. Algunos han tenido menos de una semana, y algunos se han extendido durante varios meses. Si tenían grandes presupuestos o prácticamente sin presupuesto para nada, un hilo común ha vuelto una y otra vez: los proyectos que se planearon bien y define claramente se desarrolló sin problemas y los que no se no lo hizo. Planificación de un juego de fondo puede ser un paso tedioso, pero es mucho más fácil de cambiar de opinión o predecir

Page 22: Juegos en Flash

problemas en el papel de lo que está en pleno desarrollo. ¿Cómo es exactamente lo que va sobre la documentación y delineando su juego es una cuestión de preferencia personal y una medida de cuán anal retentiva que está dispuesto a ser. He aquí algunas estrategias que funcionan para mí.

Step 1Ser capaz de describir el juego desde una vista de pájaro en una o dos frases. La mayoría de cualquier idea de juego, sin importar su complejidad, se puede resumir de esta manera, aunque deja fuera muchos detalles. Ser capaz de extraer un juego hasta su premisa más básica se mantiene en el camino y actúa como un "cuadro grande" recordatorio de lo que estamos construyendo. Si usted trabaja en una empresa de construcción de juegos para los clientes, lo más probable es tratar con la gente de marketing, no los jugadores, sino que tienden a apreciar el grado de concisión. Por ejemplo, un resumen de Pac-Man podría ser el siguiente:Moverse a través de un laberinto de recolección de alimentos y evitar los fantasmas que están tratando de matarte. Un juego que una vez construida para la bebida Mountain Dew MDX que disponemos de una descripción similar a lo siguiente:Conducir un taxi por la ciudad en la noche y ganar tanto dinero como sea posible mediante la entrega de los pasajeros a su destino de manera oportuna. Recoge las botellas de MDX para un aumento de velocidad.Tenga en cuenta el tapón en el extremo que expondrá cómo el producto del cliente se expondrán, que es muy intencional.

Step 2Esquema o estructura metálica a cabo el flujo de todas las pantallas del juego. En su forma más básica, esto incluye el menú principal, paneles de ayuda, el centro de juego en sí, y cualquier pantalla de resultados (enlace cliente, marcadores, etc.) Tenga en cuenta que esto no es un esquema de juego, sino más bien todos los pasos previos y que lo rodean. Realizar este paso tapa-ciones para la progresión del usuario a través del juego y ayuda a identificar los puntos de contacto entre las diferentes pantallas que pueden ser difíciles de integrar, si usted no planea por anticipado. Figura 3.1 es un ejemplo de cómo un simple juego con pantallas relativamente pocos pueden ver. En este ejemplo, el texto en negrita representa los botones o enlaces que se puede hacer clic para acceder a la pantalla asociada. Una trama tan simple como esto también suele ser útil a los artistas, que les recuerda los botones necesarios, llamadas, etcPuede haber notado () alrededor del botón Salir. Este indicador-, indica que un botón Salir es opcional. Tiene sentido para los juegos que un jugador se descargará en su ordenador, pero para juegos web en un navegador, en realidad no tienen un lugar. Si agrega la opción de Salir de su juego en una página Web, asegúrese de que sabe dónde va a enviar.

Page 23: Juegos en Flash

Step 3Con su descripción y la estructura metálica básica en la mano, es el momento para delinear los mecanismos básicos que el juego utilizará. Esto es más o menos una lista de características y simplemente puede ser en forma de viñetas, pero el detalle más a cubrir las sorpresas menos te encontrarás con una vez que estás en la producción. Se le permite romper el juego en sus piezas principales de la funcionalidad. Esto incluye componentes tales como las reglas del juego, los mecanismos de entrada (como el teclado o el ratón), el movimiento y la colisión, y cómo la puntuación del jugador o el progreso se determina y se registran. Una vez que se remitan a Pac-Man como un ejemplo, así es como una lista de la mecánica podría ser:• Laberinto del motor del azulejo• Nada puede mover a través de paredes•Cualquier espacio abierto está lleno de alimentos, power-ups, o los puntos de bonificación (fruta)• Un paso a través de conexión de los lados izquierdo y derecho

Page 24: Juegos en Flash

• Cada teja tiene por lo menos uno y hasta cuatro posibles conexiones con otras piezas• Colisión de gestión• Laberinto• Fantasmas• Recogida• El jugador• Entrada de teclado, las flechas direccionales• Vive-El jugador tiene tres vidas al comienzo del juego-El jugador pierde una vida cada vez que es golpeado por un fantasma sin un power-up-Cuando el jugador muere, su progreso en el nivel actual se mantiene• AI• El comportamiento normal: el jugador persigue• el comportamiento de encendido: evita jugador• Comienza desde una ubicación central en el comienzo del nivel y es enviado a la misma si se detecta por el jugador en el modo de encendido• La velocidad aumenta con cada nivel sucesivo• Recogida• No se pick-ups regenerar hasta el inicio de un nuevo nivel o un nuevo juego• Alimentos-Todos los alimentos recogidas deben ser recogidos para ganar un nivel-Alimentación contribuye 10 puntos por artículo a la puntuación del jugador• power-ups-Cada nivel del juego tiene cuatro power-ups-Comer un power-up jugador hace invencible durante cinco segundosy les permite comer fantasmas• Bono de alimentos- Aparecer en un intervalo aleatorio, de uno en uno, y sólo permanecer en el lugar durante unos segundos antes de desaparecer-Contribuye 100 puntos por artículo a la puntuación del jugador• Puntaje• Recogida y fantasmas comer contribuir a la puntuación global• La puntuación final se utiliza como mecanismo de clasificación de marcadores• Los criterios ganadora• El jugador gana un nivel en que recoge todos los alimentos• El juego continúa hasta que el jugador se queda sin vida, recibiendo sucesivamente más difícil con cada nivel (véase IA)Como puede ver, todas las funciones habituales de Pac-Man han sido fueraalineados aquí, así como sus relaciones entre sí. Tenga en cuenta que esta lista no es normalmente el cliente se enfrenta, pero en proyectos con una línea de tiempo corto, puede ser sabio para ponerlo delante de un cliente para obtener el cierre de sesión antes de comenzar la producción. Esto puede darle aprovechar al cliente de que el cambio de última hora se reduce la línea y amenaza con hacer fracasar el proyecto. También recibe el cliente de poder y los hace sentir como si tuvieran algo que decir en el proceso, pero en un momento en un cambio de dirección no es catastrófico.

Step 4Crear una lista de activos. Ya sea que esté trabajando con un artista o usted está construyendo todo el juego mismo, es una buena práctica hacer una lista de todo el arte, el sonido, y copia (o texto) los activos que usted necesita. Trabajando a través de esta lista después del paso 3 es importante porque la mecánica del juego y las piezas de arte y

Page 25: Juegos en Flash

animaciones que necesita debe estar fresco en su cabeza. Siguiendo el tema de Pac-Man, aquí está una lista de activos de la muestra. Puede hacer referencia a su estructura metálica en el paso 2 para ayudarle a recordar cuáles son los bienes que necesita para las pantallas nongameplay.• Las animaciones del juego• Pac-Man- Movimiento- De encendido- Muerte• Fantasmas- Movimiento-Retirada movimiento• Arte del juego estático• Laberinto de las paredes• Alimentos• Power-ups •responsabilidad de alimentos• Punto de muestra• Pantallas Nongame• Cargador de obras de arte• Menú Principal- Título de obras de arte- El botón de Reproducción (tres estados: arriba, otra vez, y hacia abajo)- Como botón de Reproducción ("") - Botón Ver Cuadro de indicadores ("")• ¿Cómo se juega- Copia de las Reglas- Reglas de obras de arte- Volver a la principal Button (tres estados: arriba, otra vez, y hacia abajo)• Ver Cuadro de indicadores - Cuadro de Indicadores de obras de arte de mesa - Volver a la principal Button (tres estados: arriba, otra vez, y hacia abajo)• Resultados de la pantalla- Puntuación mostrar obras de arte- Jugar de nuevo el botón (tres estados: arriba, otra vez, y hacia abajo)- Mensaje del botón Puntuación ("")- Volver al botón de menú principal ("")Mensaje • Puntuación de la pantalla- Confirmación de mensajes- Ver Cuadro de indicadores del botón (tres estados: arriba, otra vez, yhacia abajo)- Volver al botón de menú principal ("")• Audio• Efectos de sonido- Comida de sonido de alimentos- Comida de energía-el sonido- Comer alimentos bono de sonido- Comida sonido fantasma- Espíritu atacar Pac-Man/death sonido- Nivel de sonido comenzar- Nivel de sonido final- Juego sobre el sonido• Música

Page 26: Juegos en Flash

- Ninguno, es Pac-Man!Usted probablemente ha notado que no hay nada en esta lista define la forma en cualquiera de estos activos debe buscar / sonido, pero esta lista sólo define los objetos y eventos que están asociados. Lo que los activos se parecen en gran medida debería ser irrelevante para usted, como promotor, siempre que cumplan con sus estándares de calidad o de su empresa y todos los requisitos técnicos, lo que nos lleva al siguiente paso.

Step 5Haga una lista de requisitos técnicos para su juego. Esto incluye dos tipos de criterios: (1) los requisitos del sistema del usuario final en el juego y (2) los posibles requisitos del lado del servidor el juego necesita para funcionar, como una base de datos y scripts de cualquier necesarias para conectarse a él . Para un juego simple, estos requisitos deben ser bastante breve, y si usted está construyendo el juego para los clientes que van a ser el anfitrión ellos mismos, esta lista podría haber sido proporcionado a usted por completo.Vamos a empezar con los requisitos del sistema para el público del juego. A menos que el juego es una copia exacta de otro título que ya ha puesto en libertad, es probable que no conocer los requisitos exactos de la máquina necesaria para ejecutar el juego sin problemas. Los presupuestos que hacer será revisado para precisión durante el proceso de prueba. Por lo menos, se puede establecer una resolución de pantalla mínima y la versión del reproductor Flash que es capaz de ejecutar el juego. Una nota sobre el reproductor Flash de Adobe es que ahora publica periódicamente actualizaciones de menor importancia que agregar funciones, además de reparación de errores. Como resultado, debe ser consciente de que ninguna de las características del corte-borde que podría requerir una versión parcheada de todo el jugador.Aquí está un ejemplo: la versión de Flash Player principales: 10 versión del reproductor Flash de menor importancia: 10.0.2.13 Resolución de pantalla: 1024 × 768 o superior Velocidad de conexión: DSL o superior RAM: 512 MB + CPU: 1.5 GHz + Estos requisitos son bastante modestos para los juegos Flash en elWeb. Es evidente que durante las pruebas y QA (garantía de calidad) pro-ceso, puede ajustar sus números iniciales como necesario por la característica del juego establecidas. Juegos con mucho movimiento y muchos objetos en movimiento en la pantalla a la vez son, evidentemente, va a necesitar más potencia de computación de una sola pantalla con las piezas del juego estático. A veces una característica puede ser lo suficientemente convincente como para justificar una compensación en los requisitos del sistema más alto y por lo tanto a un público reducido. Esta decisión no debe tomarse a la ligera, sin embargo. Por ejemplo, más robusto a Amnistía Internacional que hace que el juego sea más agradable pero los impuestos de la CPU es más justificable que un montón de efectos especiales en tiempo real, tales como sombras, brillos, etc, que se ven bien, pero no añade ningún valor real de juego . Usted y el kilometraje de su cliente pueden variar, pero la experiencia me ha demostrado que el menor sea el obstáculo técnico a la entrada más gente va a jugar su juego.Luego vienen los requisitos del lado del servidor para su juego. Para los juegos de simulación-nas que carecen de datos que necesita ser salvado de la sesión a sesión-ción, esto es, probablemente, tan simple como tener una página HTML a la casa de archivo SWF de su juego. Más y más, sin embargo, los jugadores esperan una funcionalidad más robusta de los juegos en la Web. La capacidad de guardar sus récords y aún mantener un perfil más grandes juegos es muy popular, ya que da derechos de los jugadores presumir cuando lo hagan bien y con frecuencia produce un cierto nivel de personalización.Dependiendo de si estamos haciendo la integración de back-end (secuencias de comandos del servidor, bases de datos, etc) o se trabaja con un equipo, esta lista de requisitos puede parecer muy diferente. Si usted trabaja en una empresa con un equipo

Page 27: Juegos en Flash

que ya tiene una infraestructura de base de datos en su lugar, sus necesidades pueden tener un aspecto como el siguiente:

Methods RequiredGuardar los parámetros de resultados: número de resultados, las iniciales de cadena, la seguridad Devuelve la cadena hash-0 para el éxito, ␣ uno para el errorLos parámetros de carga de la tabla de puntuación: el tamaño-número Devuelve la lista de las iniciales y los resultados, de menor a mayorBasado en el ejemplo de estructura metálica, que hemos creado a lo largo de los pasos anteriores, estos dos métodos (o funciones) son todo lo que necesita para enviar la puntuación de un jugador y cargar una tabla de puntuaciones más altas. El primer método, el ahorro de la cuenta, recibirá la puntuación del jugador, sus iniciales, y un picadillo de seguridad (que está cubierto en profundidad en el capítulo de la prima en línea "en guardia"). El segundo método, que se utiliza cuando se ve la tabla de mejores puntuaciones, recibiría un tamaño de la tabla (como 10, 20, etc) para el número de resultados a devolver. Independientemente de si su equipo trabaja en PHP,. NET, o algún otro lenguaje de servidor, esta simple enumeración les permitirá saber cuál es el código que necesitan para exponer a Flash para que el juego para llevar a cabo sus operaciones.Si va a la construcción de estas secuencias de comandos de ti mismo, y no ya tienen un sistema en el lugar para hacerlo, tendrá que establecer una estructura de base de datos a la casa de todos los datos de su juego. Si usted es nuevo en esta área de desarrollo, pero quiere aprender, yo recomiendo empezar con PHP. Es gratis, es rápido, y es relativamente fácil de aprender. También hay muchos recursos en los libros y en Internet para saber cómo guardar los datos en una base de datos con PHP.A BETTER PHPSi ya está familiarizado con PHP, yo recomendaría mirar en AMFPHP, sino que le permite enviar datos binarios en formato nativo de Flash en lugar de cadenas de nombre / valor. Debido a esto, que te permite enviar y recibir los resultados de tipo (es decir, una serie regresa como un número, no como una cadena), y los fragmentos de datos son mucho más pequeños y más rápidos. Hay ejemplos del uso de AMFPHP en el capítulo 15 y el Apéndice D.

Step 6 (Optional)Diagrama de las clases con un modelador UML. UML significa Lenguaje Unificado de Modelado y es el estándar para la planificación de complejos de software a través de un proceso visual. Básicamente, se trata de mostrar visualmente la jerarquía de las clases que la intención de crear uno junto al otro, con todas las propiedades a disposición del público y los métodos enumerados a lo largo de lo que ellos aceptan y devuelven. Usted se estará preguntando, "¿Por qué querría hacer eso? ¿Por qué no puedo empezar a escribir código y crear lo que yo vaya "La respuesta es simple, un diagrama UML tiene todo el proyecto en consideración en un solo documento. Es mucho más fácil hacer los cambios y corregir inconsistencias y confusión en las convenciones de nomenclatura de este punto de vista de pájaro de una vez que tienes una docena de ActionScript los archivos abiertos y que está tratando de recordar lo que el nombre del método que estamos tratando de llamada de uno a otro. Usted puede mantener el diagrama a mano como se trabaja, y hay programas disponibles, que se completó el diagrama y lo convierten en reales archivos de clases de ActionScript completo con todos los métodos y propiedades listo para ser utilizado! Figuras 3.2 y 3.3 muestran cómo un diseño visual puede ser un conjunto de clase listos para usar plantillas.Ahora te estás preguntando: "Bueno, si este paso es tan impor-tante y útil, ¿por qué tienes que aparece al final como opcional?" Hay un par de razones para ello. Una de las

Page 28: Juegos en Flash

razones es que para juegos muy simples en un apretado calendario, un diagrama UML en toda regla puede producir bajos rendimientos en el tiempo que podría ser mejor gastado sólo la anulación del código. Si estás bastante seguro de que su juego va a depender de un par de archivos de clases, UML es probablemente una exageración. Yo muy rara vez lo uso en mi trabajo del día a día, pero en ocasiones, ha sido de gran ayuda. En segundo lugar, aunque muchas opciones de la herramienta UML existen, con un gran número de ofrendas, todavía tengo que encontrar uno que yo recomiendo de todo corazón para el desarrollo de Flash. Bueno, lo dicho. La mejor herramienta UML para ActionScript que he usado es gModeler subvención de Skinner. Es aerodinámico especial para este uso, sino que fue creada en Flash por lo que se pueden ejecutar en cualquier sistema operativo que soporta el reproductor de Flash, y va a generar código, así como la documentación. Por desgracia, es de hace varios años y sólo va a generar hasta el código ActionScript 2, dejando a los desarrolladores de AS3 como nosotros en el frío. Si todavía estás haciendo un trabajo en AS2, le recomiendo que use para el modelo de su clase.

Figure 3.2 A UML diagram representing a game hierarchy.

Aunque no he encontrado mi equivalente para "AS3 gModeler," he encontrado el libre StarUML (www.staruml.com) es un título sólido y bastante sencillo. Además, un empleado de Adobe ha creado un tutorial que muestra cómo generar código auxiliar de los diagramas muy gModeler misma manera lo hizo. Estos recursos están disponibles en www.flashgamebook.com.Sé que esto parece como un montón de pasos sólo para empezar, si no estás acostumbrado a este nivel de planificación. Confía en mí, no sólo será más fácil y más natural a medida que averiguar lo que funciona mejor para usted, pero usted encontrará

Page 29: Juegos en Flash

que menos sorpresas surgen en el camino. Ahora que usted tiene su plan de firmeza en la mano, es el momento para abrir esa copia de Flash.Una rápida revisión de los pasos de planificación: • Una descripción y dos frase • Un wireframe de las vistas del juego / Lista • El flujo de la mecánica de juego • Lista de los activos: el arte, animación, sonido, vídeo y copias • Requisitos técnicos • diagramas de clases UML

Figure 3.3 The generated classes that resulted from the UML diagram in Fig. 3.2.

CAPITULO 4

//COMMENTS FTW!

En este capítulo, vamos a cubrir las mejores prácticas para utilizar cuando programación en ActionScript 3. Esto incluye la utilización inteligente de la clase, utilizando el modelo de eventos, manejo de errores, y estructuras de datos. También vamos a cubrir una serie de particularidades de Flash, que tienden a viaje hasta llegar a los desarrolladores de Flash de otros idiomas.

Fair WarningVale la pena mencionar que este capítulo (como el resto de este libro) se supone que está familiarizado tanto con ActionScript 1 o 2 o otro lenguaje de programación. Si usted no tiene idea de lo que los objetos, variables o funciones o que nunca han utilizado Flash en absoluto, que se perderá muy pronto. Cierta familiaridad con ActionScript 3 es ideal ya que también estaremos moviendo muy rápidamente a través de una amplia variedad de temas, pero no es absolutamente necesario. La documentación que viene con Flash expone sobre todos estos temas, así que si usted se encuentra confundido o si desea obtener más información, puedes consultar los ejemplos. También puede siempre hacer preguntas sobre cualquier capítulo de este libro en www.flashgamebook.com. Si usted es

Page 30: Juegos en Flash

un usuario experimentado AS3, ser paciente-Nosotros seremos obtener a través de los conceptos básicos tan pronto como sea posible y pasar a la parte divertida!

Part 1: ClassesComo aprendimos en el capítulo 1, las clases son fundamentalmente los planos de los objetos en ActionScript (y muchos otros lenguajes de programación orientados a objetos). Definen las propiedades que son inherentes a ese objeto, así como los métodos que determinan cómo ese objeto funcio-nes por su cuenta y como parte de un contexto más amplio. Cuando se crea un objeto de una clase, ese objeto que se conoce como una instancia de esa clase. Cada instancia de una clase puede tener diferentes valores específicos para sus características, pero todos comparten la misma arquitectura, por lo que Flash sabe que todas las instancias de una clase determinada se comportará de la misma manera. En su forma más simple, de instancias, o la creación de un objeto se parece a la que se muestra a continuación en ActionScript.

var myObject:MyClass = new MyClass();

En una convención de nomenclatura estándar, las clases deben comenzar con una letra mayúscula y luego usar InterCaps, o "CamelCase" a partir de entonces, que denota el comienzo de una palabra con una letra mayúscula. CamelCase hace que los nombres en código mucho más fácil de leer, tomar, por ejemplo, el nombre más largo de la clase se utilizan actualmente en la base de código en Flash CS5:

HTMLUncaughtScriptExceptionEvent

Si bien esto es algo así como un ejemplo extremo, tenga en cuenta que es mucho más fácil de leer que:

htmluncaughtscriptexceptionevent

Packages

Un conjunto de clases con funcionalidad categóricamente similares o relacionados pueden ser agrupados en paquetes. Las clases en el mismo paquete pueden hacer referencia a ellos sin ningún código especial, mientras que las clases en diferentes paquetes debe importar unos a otros con una línea de código, similar a lo siguiente:

import flash.display.MovieClip;

Tenga en cuenta que en este caso, la clase MovieClip se encuentra dentro del paquete de la exhibición, que forma parte del paquete flash más grande. La convención estándar de nomenclatura para los paquetes es todas las letras minúsculas, que los diferencia de clases visuales. Los paquetes están representados en el sistema de archivos como una serie de carpetas anidadas. En el ejemplo anterior, si la clase MovieClip no se incluyó una parte del reproductor de Flash, se puede encontrar el archivo MovieClip.as dentro de una carpeta llamada pantalla, dentro de otra carpeta llamada flash.

Classes as Files

Page 31: Juegos en Flash

Para crear una clase, sólo tiene que abrir Flash o un editor de texto como Flash Desarrollar y crear un marco básico. Todas las clases AS3 debe tener esta cantidad mínima de código para funcionar.

package flash.display " { " " public class MovieClip " {" }" }

Tenga en cuenta que los nombres en negrita son el paquete de encargo y los nombres de clase de su elección. Todas las clases necesitan una definición de clase envuelto por una definición de paquete, colocado en una estructura de carpetas que coincide con la jerarquía de paquetes. Sin embargo, esta clase no hacer nada, así que la próxima vamos a cubrir la adición de propiedades y métodos.

Constructores

Cada clase tiene un constructor, incluso si no hace nada y no se define explícitamente. Es la función, con el mismo nombre que la clase, que se llama cuando una nueva instancia de la clase se crea. En el caso de nuestro último ejemplo, incluso si lo dejamos fuera, Flash añade el siguiente a la clase:

package flash.display { ! public class MovieClip {! ! public function MovieClip() {! ! }! }}

El constructor nos permite ejecutar cualquier código de inicialización que la nueva instancia podría necesitar, o no puede hacer nada, dependiendo de cómo la clase se va a utilizar.

Constantes, Variables, y Metodos

Una clase sin ningún tipo de datos o funcionalidad en su interior no es de muy gran utilidad, por lo que podemos definir variables o propiedades, de la clase que almacenará la información y los métodos o funciones que llevará a cabo las acciones. Voy a suponer que usted ya sabe cómo utilizar las variables y métodos, ya sea de las versiones anteriores de la acción de secuencias de comandos o en otro idioma. Las constantes son completamente nuevos para AS3, pero no un concepto complicado. En esencia, son variables que sólo se puede asignar un valor una vez. Cuando se declara una constante o variable, lo mejor es darle un tipo, que indica a Flash que la clase que se utiliza como modelo para esa variable. A continuación se presentan algunos ejemplos:

Page 32: Juegos en Flash

const myInt:int = -3; //WILL ALWAYS BE -3 AND CANNOT BE MODIFIED var myBoolean:Boolean = true; var myString:String = "Hello World"; var myObject:Object = new Object();

Dar una variable de un tipo también se guarda la memoria, ya que Flash sabe la cantidad máxima de memoria que necesita para almacenar una instancia de una clase específica. Si no escribe una variable, como en el siguiente ejemplo, Flash debe reservar una mayor cantidad de memoria para dar cabida a cualquier valor posible.

var myMystery:* = "?";

Una vez que se asigna un valor a una variable sin tipo, se convierte en tipo a partir de ese momento, por lo que los intentos de cambiar su tipo (como se puede en versiones anteriores de ActionScript) dará lugar a errores de ejecución, tales como el siguiente ejemplo.

var myMystery:* = "?"; myMystery = 5; //WILL CAUSE A RUNTIME ERROR

Lo que es peor, el ejemplo anterior, no serán tomados durante la compilación, por lo que podría conseguir perdido hasta que el del juego se despliega en directo para los usuarios reales. Menos que sea absolutamente inevitable (como una instancia en la que simplemente no saben lo que se asigna a una variable), escriba siempre sus variables. Usted va a crear dolores de cabeza mucho menos en el camino por ti mismo.Al definir los métodos, no son las prácticas análogas a seguir. Se trata de las mejores prácticas para definir los parámetros que un método recibirá y lo que, en todo caso, volverá.

function myFunction (myParam:String):void { ! //COMMANDS HERE}

En este ejemplo, el método acepta un solo parámetro, myParam, y no devuelve nada. Si usted tiene un caso en que un método tiene que aceptar un número indeterminado de parámetros, una sintaxis ligeramente diferente puede ser utilizado.

function myFunction (...params):void { ! //COMMANDS HERE}Aquí, el único parámetro, params, es precedido por tres puntos. Esto significa que Flash que el parámetro debe ser tratado como una matriz de valores, por lo que llegar a cada parámetro que se pasó debe hacerse a través de la sintaxis de matriz:

function myFunction (...params):void { ! trace(params[0]);}

Page 33: Juegos en Flash

Es importante recordar que al aceptar un número variable de parámetros, comprobación de tipos durante la compilación no cogerá todo intento de pasar los datos no válidos para el método. En este caso, lo mejor es hacer algún tipo de control manual y Gener-ate errores en tiempo de ejecución. Vamos a cubrir más de los errores en breve.

function myFunction (...params):void { ! for (var i:int = 0; i < params.length; i++) {! ! if (!(params[i] is DisplayObject)) {! ! ! throw new ArgumentError("Only DisplayObjects! ! ! ! can be used in myFunction.");! ! }! }

}

El vacío de palabras clave se utiliza para denotar una función que no devuelve nada (y se producirá un error si se intenta), y cualquier otro tipo que las variables se puede utilizar también puede usar aquí. Si se suelta el valor devuelto por completo, se puede optar por devolver algo o no, dependiendo de alguna pieza de lógica interna. Sin embargo, como una buena práctica, un método siempre que declare lo que volverá, ya que ayuda a detectar los errores y mantiene la coherencia.

Metodos Getter y Setter

Hay dos tipos especiales de los métodos que se pueden crear cuando se quiere exponer a una variable fuera de su categoría, pero que desea controlar cómo se utiliza la variable. Se les conoce como de acceso o de métodos getter y setter, y sese denominan como normal variable asigna -ción, sino que actúan como funciones debajo . Usted puede utilizar para hacer que las variables de sólo lectura o para realizar acciones en un valor antes de que se configura como una variable. Hay algunas reglas a seguir cuando se utilizan estos métodos especiales: los métodos getter no aceptar los parámetros y debe especificar un tipo de retorno y métodos de establecimiento sólo puede tener un parámetro y no devuelve nada. Echemos un vistazo a un par de ejemplos en un único guión.

package { ! public class MyClass {! ! protected var _maxNameLength:int = 8;! ! protected var _name:String;! ! protected var _lives:int = 3;! !! ! public function get name():String {!! ! ! return _name;! ! }! ! public function set name(value:String):void {

Page 34: Juegos en Flash

! ! ! name = value.substr(0,maxNameLength); ! ! } ! ! public function get lives():int {! ! ! return _lives;! ! }

! }} //OUTSIDE CLASS var myInstance:MyClass = new MyClass(); myInstance.name = "CHRISTOPHER"; trace(myInstance.name); //OUTPUTS "CHRISTOP";trace(myInstance.lives); //OUTPUTS 3; myInstance.lives = 10; //THROWS ERROR

Las funciones getter y setter nombre de devolver el valor de _name protegidas, que de otro modo serían inaccesibles, y también las fuerzas a cualquier intento de asignar un valor a la propiedad _name a una longitud fija de ocho caracteres. El comprador vida es un ejemplo de una propiedad de sólo lectura, no hay una función setter de acompañamiento. Cualquier intento de establecer el valor se producirá un error. Esto es muy útil cuando se necesita utilizar valores dentro de la categoría, pero que también quieren clases externas para poder leer el valor.** La convención estándar para nombres de variables y el método es comenzar en minúscula y luego usar CamelCase para todas las palabras siguientes en el nombre. Existe cierto debate sobre la manera de delimitar las variables públicas de protección, privados o internos. Mi preferencia es seguir la convención de Adobe, que consiste en utilizar un guión bajo ("_") al principio del nombre de cualquier propiedad que no está expresamente público. Si lo hace, le permite utilizar métodos getter y setter como el ejemplo anterior, donde _name fue la variable protegida y el nombre fue utilizado para el par de métodos. Esta continuidad en los rendimientos de su denominación y hace que su código sea más fácil para los demás (y usted) a seguir.

AN ALTERNATE NAMING CONVENTIONDesde que escribí la primera edición de este libro, he tenido el privilegio de trabajar directamente con algunos veteranos de la industria del videojuego y recogió algunos nuevos patrones y convenciones que se utilizan comúnmente. Aunque creo que todavía hay valor en el método de Adobe si usted es un principiante o si usted es sólo el trabajoción en Flash, yo quería hablar de esta convención alternativa, ya que es especialmente útil si usted está con la intención de tratar de aprovechar todo el código plata-formas fuera de AS3. Es también lo que ahora uso como mi nivel y creo que es justo dar a conocer que. Básicamente, no hace diferencia entre las propiedades públicas y privadas, sino que todos los prefijos con "m" como miembros de una clase. No hay ninguna razón real para los miembros públicos o privados para que los diferentes convenios, porque el compilador acceso de las capturas ilegales de cualquier tipo-no es como usted puede realmente estropear. Además, tiene la ventaja añadida de agrupar todas las variables miembro de una clase alfabeticamente cuando se utiliza sugerencias para el código. Por ejemplo, la velocidad de un jugador sería mSpeed en lugar de _speed, independientemente de su público que, protegido, o privado. Nombres de los métodos y

Page 35: Juegos en Flash

nombres de acceso se sigue utilizando como normal, pero los parámetros del método son precedidos por un guión con el fin de que denotan claramente dentro del método como algo temporal y local. Usted podría utilizar algo más que un prefijo, algunas personas como "p" en su lugar. No utilice un signo de dólar "$", como en algunos otros idiomas, un ingeniero de Adobe hombres mencionados en su blog que esto podría causar problemas en determinadas circunstancias, ya que los conflictos internos con Flash Player de nomenclatura. El último ejemplo en el capítulo 16 se utilizan estos convenios más recientes, para que pueda ver cómo se comparan con el estándar de Adobe y decidir si lo prefiere. En última instancia, lo importante para recordar cuando se trabaja en cualquier proyecto es escoger un método que tenga sentido y aferrarse a él constantemente.

Class Identifiers

Las clases se pueden utilizar algunos identificadores diferentes para determinar la forma en que están expuestos a otras clases. Los cuatro identificadores disponibles son los siguientes:• Pública: El atributo public define que una clase puede tener acceso o utilizar de cualquier otro lugar.• Interior: El atributo interno permite que una clase sólo se puede acceder por otras clases del mismo paquete-De forma predeterminada, las clases se interna a menos público determinado, de modo interno en realidad no tienen que ser utilizados.• Dinámica: Si una clase es dinámica, puede tener propiedades y métodos a las que en tiempo de ejecución-De forma predeterminada, las clases son estáticas y sólo se puede utilizar las propiedades y métodos definidos dentro de sí mismos.• Final: Si una clase es final, no puede ser prorrogado por otros de clase- Más sobre esto en breve será discutido cuando cubrimos la herencia- De forma predeterminada, las clases pueden extenderse y no son definitivos. Todos estos identificadores pueden ser utilizados con los demás, salvo que el público no se puede utilizar con la residencia. Del mismo modo, las variables y métodos de SAO puede tener su propio conjunto de identificadores que se utilizan para definir la forma en que se exponen fuera de la clase.• Pública: Al igual que el atributo de la clase, esto denota que una variable o método se puede acceder desde cualquier lugar, incluso fuera de la clase.• Interior: También similar a las clases, esto denota que una variable ométodo sólo se puede acceder desde el interior de su paquete.• Privado: El atributo private impide una variable o métododesde que se accede fuera de su clase individual.• Protección: Un atributo protegido es más o menos como privado, salvo que las variables de protección y los métodos también se puede acceder a las clases que extienden la clase actual (más sobre la herencia en breve).• Estática: Si un método o variable es estática, es parte de la clase y no casos de la clase, es decir, sólo hay cada vez un valor o funcionalidad definida, y se accede a través del nombre de la clase en lugar de una instancia (es decir, MovieClip.staticVar en lugar de myMovieClip.staticVar)-Tenga en cuenta que las propiedades y métodos estáticos no se heredan las subclases.Los primeros cuatro atributos en esta lista no se puede utilizar uno con el otro, ya que entraría en conflicto, pero estática se puede utilizar en combinación con cualquiera de ellos.

Page 36: Juegos en Flash

Inheritance and PolymorphismEstos dos conceptos se abordan en breve en el capítulo 1, pero vamos a exponer en ellos un poco más aquí. Cuando usted necesita para crear una clase que tiene la misma funcionalidad que otra clase, pero necesita algunas propiedades o métodos adicionales, una buena opción para ahorrar tiempo y la codificación es extender la primera clase a una nueva clase, conocida como una sub-clase. Todos los métodos públicos y protegidos y variables que no son estáticos, estará disponible para la nueva clase. Para aclarar cualquier estática propie-dades de los padres, o superclase, debe ser precedido por el nombre de clase (como en el ejemplo siguiente). Además, los métodos internos o variables estarán disponibles para la subclase si se encuentra en el paquete de la misma edad que su superclase. Para ilustrarlo, veamos un ejemplo a continuación:

package {! ! public class SuperClass {! ! static public var className:String = "SuperClass";! ! }}package { ! ! public class SubClass extends SuperClass {! ! ! ! public function SubClass() { ! ! ! ! ! trace(SuperClass.className); //OUTPUTS! ! ! ! ! ! "SuperClass" ! ! ! ! ! trace(className); //THROWS ERROR! ! ! ! }! ! }}//FROM OUTSIDE EITHER CLASS trace(SuperClass.className); //OUTPUTS "SuperClass" trace(SubClass.className); //THROWS ERROR

Ocasionalmente, tendrás que cambiar la funcionalidad de un método en una subclase de la forma en que se comporta de la superclase. Este cambio en la funcionalidad a través de la herencia que se conoce como polimorfismo. Usted puede hacer esto utilizando la palabra clave override antes del inicio del método, aunque con una serie de advertencias.• Los métodos sólo puede ser anulado, sin propiedades• Sólo pública, protegida, y los métodos internos puede ser anulado• Los métodos de interior sólo puede ser anulado en las subclases en el mismo paquete que la superclase• El método primordial debe coincidir con la nueva composición del método original, con

los mismos parámetros y el valor devuelto Veamos un ejemplo.

package { ! class SuperClass {! ! public var name:String = "SuperClass"; ! ! protected var _number:Number = 5; ! ! internal var _packageNumber:Number = 7.5;

Page 37: Juegos en Flash

! ! private var _secretNumber:Number = 10;!" " public function helloWorld():void { ! ! ! trace("HELLO WORLD");! ! }! }}

package { ! class SubClass extends SuperClass {! ! public function SubClass() {! ! ! trace(name); //OUTPUTS "SuperClass" ! ! ! trace(_number); //OUTPUTS 5; ! ! ! trace(_packageNumber); //OUTPUTS 7.5 ! ! ! helloWorld(); //OUTPUTS "HI WORLD"; ! ! ! super.helloWorld(); //OUTPUTS "HELLO WORLD"; ! ! ! trace(_secretNumber); //THROWS ERROR;! ! }

! ! override public function helloWorld():void {! ! ! trace("HI WORLD");! ! }! }}

Cuando las huellas SubClase a cabo las propiedades que ha heredado de la superclase, se mantienen intactos, con excepción de la variable privada. Además, cuando se ejecuta desde helloWorld subclase, traza un mensaje diferente que cuando se ejecuta desde SuperClass. Dicho esto, hay una manera de llegar a la implementación de la superclase de helloWorld mediante el uso de la palabra clave super. Super devuelve una referencia a la superclase de la clase actual, lo que le permite el acceso a cualquier método que pueda tener se reemplaza.

InterfacesUno de los aspectos más comúnmente entendido mal (incluso por mí mismo por mucho tiempo) de la programación orientada a objetos (POO) es el concepto de interfaces. Es confuso por varias razones, no menos importante de las cuales es la confusión de una interfaz de programación orientada a objetos con una interfaz gráfica de usuario (como los sistemas operativos proporcionan). Una interfaz no contiene ningún código, en las afueras de la declaración de los métodos públicos que una clase va a usar y lo que cada uno acepte como parámetros y lo que cada uno va a regresar. Si una clase es como un plano de la direc-ciones específicas para la creación de una nueva instancia de esa clase, una interfaz es como una lista de verificación para ese plan para asegurarse de que se adhiere a una cierta espe-calcificación. Tal vez la mejor manera de entender cómo se estructura una interfaz es ver una en el código.

Page 38: Juegos en Flash

public interface IEventDispatcher { ! function addEventListener(type:String, listener:Function,! ! useCapture:Boolean=false, priority:int=0,useWeakReference:! ! Boolean = false):void; ! function removeEventListener(type:String, listener:Function,! ! useCapture:Boolean=false):void; ! function dispatchEvent(event:Event):Boolean; ! function hasEventListener(type:String):Boolean; ! function willTrigger(type:String):Boolean;}

Tenga en cuenta las diferencias entre una interfaz y una clase. Las interfaces son siempre públicos o internos, al igual que sus homólogos de clase, pero ninguno de los métodos tiene los atributos, ya que se supone que todos los públicos. Las interfaces no pueden incluir variables, pero pueden incluir métodos getter y setter, que puede sustituir a las variables.En este punto, que muy bien podría estarse preguntando, "¿Por qué nunca la molestia de utilizar una interfaz cuando simplemente puede ampliar una clase para asegurarse de que todas las subclases tienen los métodos disponibles?" La respuesta es que a diferencia de algunos otros idiomas, clases de en Flash no puede heredar de múltiples superclases. Esto plantea un problema cuando se necesita extender una clase sino que incluyen la funcionalidad de otra clase en una jerarquía de herencia diferentes.Un buen ejemplo de una situación como esta es la interfaz IBitmapDrawable que forma parte del paquete de visualización de Flash. Cuando quieres dibujar algo en un objeto BitmapData, puede utilizar cualquiera otro objeto BitmapData o un DisplayObject. Con el fin de conservar en el mismo cualquier objeto de que se pasa al método draw, tanto BitmapData y DisplayObject implementar una interfaz llamada iBit-mapDrawable. Esta interfaz en realidad no hace otra cosa que hacer cumplir esta compatibilidad entre las dos clases que no tienen nada que ver entre sí. El método draw puede tener el siguiente aspecto:

public function draw(source:IBitmapDrawable, matrix:Matrix = null, ! colorTransform:ColorTransform = null, blendMode:String = null, ! clipRect:Rectangle = null, smoothing:Boolean = false):void

Cuando un objeto se pasa para el parámetro de fuente, los controles de Flash para ver si el objeto implementa la interfaz IBitmapDrawable y puede lanzar un error dejar que el desarrollador sabe. He aquí otro ejemplo de una clase que implementa una interfaz, mientras que la ampliación de una clase de relación.

package { ! import flash.events.IEventDispatcher; ! import flash.events.EventDispatcher;! import flash.events.Event; ! import flash.geom.Rectangle;

Page 39: Juegos en Flash

! public class RectangleDispatcher extends Rectangle ! ! implements IEventDispatcher {! ! ! private var _dispatcher:EventDispatcher;

! ! ! public function RectangleDispatcher() { _! ! ! ! dispatcher = new EventDispatcher(this);! ! ! }

! ! ! override public function set width(value:Number) { ! ! ! ! super.width = value;! ! ! ! dispatchEvent(new Event(Event.CHANGE));! ! ! }

! ! ! override public function set height(value:Number) { ! ! ! ! super.height = value;! ! ! ! dispatchEvent(new Event(Event.CHANGE));! ! ! }

! ! ! public function addEventListener(type:String, ! ! ! ! listener:Function, useCapture:Boolean=false, ! ! ! ! priority:int=0,useWeakReference:Boolean = ! ! ! ! false):void {! ! ! ! ! _dispatcher.addEventListener(type, listener, ! ! ! ! ! ! useCapture, priority, useWeakReference);! ! ! }

! ! ! public function removeEventListener(type:String, ! ! ! ! listener:Function, useCapture:Boolean=false):void {! ! ! ! ! _dispatcher.removeEventListener(type, listener, ! ! ! ! useCapture);! ! ! }

! ! ! public function dispatchEvent(event:Event):Boolean{! ! ! _dispatcher.dispatchEvent(event); ! ! ! }

! ! ! public function hasEventListener(type:String):Boolean{ ! ! ! ! return _dispatcher.hasEventListener(type);! ! ! }

! ! ! public function willTrigger(type:String):Boolean{ ! ! ! ! return _dispatcher.willTrigger(type);! ! ! }! }}

En este ejemplo, la clase está extendiendo es rectangular, que no tiene vínculos con la jerarquía EventDispatcher. Mediante la implementación de la interfaz IEventDispatcher y la creación de una instancia de la clase Event-Dispatcher, podemos disfrutar de la funcionalidad de un rectángulo y un EventDispatcher. Cuando la anchura o la altura de

Page 40: Juegos en Flash

este rectángulo de cambios especial, que enviará un evento a todo lo que está escuchando. Nosotros cubriremos más en los eventos en una sección posterior.Entonces, la pregunta ahora es, probablemente, "¿Cuándo debo utilizar interfaces?" A diferencia de algunos defensores de programación orientada a objetos que creen que la respuesta es siempre: "Creo que realmente depende de la amplitud del juego o aplicación que estamos construyendo. A veces, en partidas rápidas, donde yo soy el único desarrollador, prefiero la herencia, porque por lo general tienen el lujo de definir mi cadena de herencia completa y no tener que trabajar dentro de un marco preexistente. Me parece interfaces para ser más útil cuando se trabaja con otros desarrolladores (en particular los de otras empresas que no estamos dispuestos a compartir código específico entre sí), ya que podemos estar de acuerdo sobre una interfaz para nuestros elementos de la clase común y la integración de nuestros respectivos componentes - componentes es mucho más probable que funcione sin problemas como resultado. Las interfaces son también muy útiles en la creación de motores flexibles, del juego reutilizables para juegos más complejos, como veremos en capítulos posteriores. Al final, las interfaces son sólo una herramienta, y como cualquier herramienta, que debe ser usado cuando sea necesario y deja solo el resto del tiempo. De hecho, en los ejemplos de móviles, vamos a ver hacia el final de este libro, donde el rendimiento es un factor clave, y las interfaces a menudo no son la respuesta.

Linking Classes to Assets in FlashUn elemento básico común de mi desarrollo del juego (y posiblemente una de las mayores ventajas de desarrollo de juegos en Flash) es la facilidad con la que se puede vincular una clase de Flash a un elemento en la biblioteca de la FLA. Cualquier elemento de la biblioteca puede tener una clase asociada vinculados a ella, pero los que es probable que más utiliza son las de DisplayObject sub-clases Sprite y MovieClip. En primer lugar, cómo Flash crea clases de elementos de la biblioteca debe ser entendido.Si se establece la propiedad vinculación de un símbolo en la biblioteca, se ha creado para una clase cuando se compila el archivo SWF, independientemente de si o no uno se definió explícitamente. Por ejemplo, tomar un Sprite en una biblioteca de FLA denominado "cuadrado", con un simple cuadrado azul en su interior. Debido a que el símbolo no es un Sprite directamente, sino más bien una extensión de Sprite, una nueva clase con el nombre de "cuadrado " se creará en tiempo de compilación que se extiende Sprite y tiene el siguiente aspecto:

package { ! ! import flash.display.Sprite;! ! public class square extends Sprite {}}

La razón de Flash hace esto es porque necesita un punto de referencia a ser capaces de crear instancias de ese símbolo en el escenario si se utiliza en el script en alguna parte. Para ver la evidencia de esto, se puede ver en todas las clases incrustado en un archivo SWF compilado en el interior de FlashDeve-lop. En la figura. 4.1, se puede ver la biblioteca de Flash a la izquierda, con el símbolo exportado con el nombre de "plaza" y refleja a la derecha en el panel de FlashDevelop proyecto con las clases utilizadas en el archivo SWF.Si había una clase definida de la plaza, sería utilizar ese archivo en lugar de generar por sí solo. Para ver el resultado de esto, podemos cambiar el nombre de la clase de vinculación del símbolo en mayúsculas "plaza" para que coincida con el nombre de una clase que ha definido para ello.

Page 41: Juegos en Flash

package { ! import flash.display.Sprite;! public class Square extends Sprite { ! ! public function Square() {! ! ! rotation = 45;! ! }! }}

Ahora, cuando el cuadrado se añade a la escenario, será rotado 45 grados.

Class versus Base ClassAl abrir el panel de vinculación para asignar una clase a un símbolo, no es un campo adicional que se utiliza para definir la clase base de un símbolo. El símbolo de la clase base es donde se define qué clase desea prorrogar respecto de ese símbolo. En el ejemplo anterior, el clase Square se extendía desde Sprite, así que el clase base para que el símbolo era flash.display.Sprite, como se muestra en la figura. 4.2.

Figure 4.1 FlashDevelop can reveal the classes used in a SWF.

Figure 4.2 The properties panel shows the linkage for the square Sprite.

Page 42: Juegos en Flash

Sin embargo, supongamos que queremos crear varias plazas de diferentes colores. No se necesita ninguna funcionalidad adicional en la parte superior de lo que la plaza ya establece, por lo que toma una clase individual para cada una sería tedioso. En su lugar, podríamos hacer varios clips de diferentes colores y configurar cada una de sus clases base de la Plaza. A continuación, los nombres de clase individuales podrían ser cosas como squareBlue, squareGreen, etc Un ejemplo se muestra en la figura. 4.3.

Using Exported Symbols with No Class FileTrato de hacer una política explícita para escribir un archivo de clase de cualquier símbolo que tengo la intención de exportar para ActionScript porque es más fácil no perder de vista que los símbolos están disponibles para mí y me permite agregar rápidamente funciones como sea necesario. Sin embargo, a veces, como en el caso del ejemplo anterior la plaza, algunos de los símbolos que estoy usando todos derivar de una clase de base que he creado y sólo se diferencian por el activos en su interior. Para utilizar estas clases en el código, sólo puede hacer referencia a la clase nombre como lo haría con cualquier otro. Por ejemplo, si yo tuviera una clase de documento para el ejemplo anterior, podría ser algo como lo siguiente:

Figure 4.3 The base class can be set to use a class for multiple symbols with different assets.

package { ! import flash.display.Sprite;! public class ClassesExample extends Sprite { ! ! public function ClassesExample() {! ! ! var blue:Square = new squareBlue(); ! ! ! addChild(blue); ! ! ! var green:Square = new squareGreen(); ! ! ! addChild(green);

Page 43: Juegos en Flash

! ! }! }}

Usted puede usarlo como una clase normal, porque cuando Flash compila el archivo SWF, será una clase normal, igual que si hubiera escrito usted mismo.

getDefinitionByName and CastingSuponga que usted necesita para crear instancias de una serie de símbolos o las clases que siguieron una secuencia numérica, por ejemplo a los efectos de nuestro ejemplo "Square1" a través de "square10." Sería muy tedioso tener que crear instancias de ellos uno a la vez y crear una gran cantidad de los códigos adicionales. Probablemente sería algo como lo siguiente:

var square:Square = new square1(); addChild(square); square = new square2(); addChild(square);... square = new square10(); addChild(square);

Por suerte, Flash nos da el capacidad de "buscar" una clase por su nombre. En el paquete flash.utils, hay un método llamado getDefinition, sobrenombre, nombre, dijo que acepta como parámetro de cadena.

for (var i:int = 1; i <= 10; i++) { ! var squareClass:Class = getDefinitionByName("square" + i)! ! as Class; ! var square:Square = new squareClass(); ! addChild(square);}

Devuelve un objeto genérico que hace referencia a la clase, si es que existe. Ese objeto se puede convertir a una clase a través de una operación conocida como de calidad. De fundición es el proceso de decirle a ActionScript para tratar un objeto como un tipo diferente de objeto. Es más a menudo se utiliza para tratar una subclase como su superclase, que se conoce como "seguro" casting porque todas el funciones se garantiza que la transferencia desde el superclase. Un ejemplo de esto sería con Sprite y MovieClip. MovieClip se extiende de Sprite, lo que es seguro para lanzar un clip de película como Sprite, porque sus métodos públicos y las variables coinciden. Si tuviéramos que hacer lo contrario, lanzar un Sprite como un clip de película, sería considerado un "inseguro" casting porque un Sprite no contiene todos los métodos y variables de un MovieClip. Mientras que Flash le permitirá emitir una u otra dirección, por lo general es una buena idea para evitar la conversión a una subclase a menos que sepa con certeza que el métodos y las variables que desea llamar estará disponible. En el caso del ejemplo anterior, la conversión de un objeto de base para una clase es una técnica de fundición inseguras, pero la clase la clase (una nomenclatura confusa para estar seguro) no contiene métodos adicionales pública o variables, lo que no hay peligro de causar un

Page 44: Juegos en Flash

error . Vamos a utilizar la fundición y getDefinitionByName regularmente más adelante en ejemplos juego.

Part 2: Events