Cómo utilizar una clase de documento en Flash

Estamos haciendo algunos cambios en Activetuts +. De ahora en adelante, nuestros tutoriales utilizarán código basado en clases, en lugar de código de línea de tiempo, siempre que sea posible. Este Consejo rápido explica lo que necesita saber.


Por qué usar archivos de clase?

Lo admito, a veces, la codificación completa en la línea de tiempo es útil. Es una forma rápida de probar un efecto y la forma más fácil de sincronizar acciones con fotogramas específicos de una animación..

Pero para cualquier proyecto que se base más en el código que en la animación, existen serias desventajas. Todo su código ActionScript está atrapado dentro del archivo FLA; no puede dividir la programación entre diferentes desarrolladores, debe copiar y pegar el código si desea reutilizarlo y se ve obligado a usar el Panel de acciones de Flash.

El uso de archivos de clase establece su código libre. Y realmente no es más difícil que codificar en la línea de tiempo; sólo implica un poco más de configuración. Lo guiaré a través de la creación de un proyecto Flash que usa clases, luego desglosaré un archivo de clase en detalle.

(Parte de la razón por la que estamos cambiando a clases es para facilitar que los desarrolladores de AS3 que no usan Flash sigan nuestros tutoriales. Si usted es uno de ellos, espero que ya esté acostumbrado a tratar con clases , pero siempre puede leer este Consejo rápido como un repaso: ¡simplemente ignore los bits sobre Flash!)


Paso 1: Crea una FLA

Estoy seguro de que ya sabes cómo hacerlo. Abre Flash y haz click Archivo> Nuevo ... Archivo Flash (ActionScript 3.0). Guárdalo donde quieras. He llamado al mio Ejemplo.fla, Pero no importa el nombre que elijas..


Paso 2: crear un archivo de ActionScript

Hacer clic Archivo> Nuevo ... Archivo ActionScript. Guardar esto como Main.as en la misma carpeta que tu FLA.

Este archivo es donde vamos a colocar el código que impulsa la FLA en sí, pero ¿cómo sabrá Flash cómo encontrarlo??


Paso 3: vincular la FLA al archivo AS

Es posible que tenga docenas de archivos AS en la misma carpeta que la FLA, por lo que Flash no querrá adivinar cuál usar. Tendremos que decirlo.

Cambie a la herramienta Selección (acceso directo: V), luego asegúrese de que no tiene nada seleccionado (presione Ctrl-Shift-A). Abra el panel de Propiedades (Ventana> Propiedades).

Si está utilizando Flash CS3, se verá así:

Panel de propiedades de Flash CS3

Entrar Principal en la casilla "Clase de documento", que coincide con el nombre de su archivo ActionScript, menos la extensión de archivo ".as" ...

Si está utilizando Flash CS4, se verá así:

Panel de propiedades de Flash CS4

En este caso, deberás ingresar Principal en la casilla "Clase". Por alguna razón, Adobe soltó el bit "Documento".


Paso 4: (Opcional) Reorganice su estructura de carpetas

No tiene que mantener todos sus archivos en el mismo directorio. Echa un vistazo a este video de consejos rápidos si quieres saber cómo mover las cosas.


Paso 5: Escriba su clase de documento

Abra su archivo Main.as y pegue el siguiente código:

 paquete import flash.display.MovieClip; clase pública principal extiende MovieClip función pública principal () 

Esta es una clase de documento vacío básico. Es la cantidad más pequeña de código que podemos escribir que realmente se ejecutará. Déjame descomponerlo:

La palabra clave del paquete le dice a Flash que todo el código entre sus llaves es parte de un solo grupo.

La palabra clave del paquete le dice a Flash que todo el código entre sus llaves es parte de un solo grupo.

La palabra clave de la clase agrupa funciones y variables juntas.

Escritura clase principal También los grupos de código juntos, pero de una manera diferente. Las clases contienen funciones y variables; los paquetes contienen clases y declaraciones de importación.

Nota: tienes que darle a tu clase el mismo nombre que el archivo AS: Principal.

Qué pasa público? Bueno, eso solo significa que otras clases en tu código podrán ver esta clase.

Queremos que nuestra clase extienda la funcionalidad de un MovieClip normal, por lo tanto, 'la clase principal extiende MovieClip'.

Esta clase Principal va a potenciar nuestra FLA. Por defecto, nuestra FLA es un clip de película (tiene una línea de tiempo).

Queremos Principal para poder hacer todo lo que un clip de película puede hacer, y más en función del código que escribimos. En otras palabras, queremos ampliar la funcionalidad de un regular Clip de película.

(A veces, es posible que no necesitemos hacer ninguna animación en la línea de tiempo principal del escenario; en este caso, no necesitamos extender MovieClip, y podemos extender Sprite en su lugar. MovieClip extiende Sprite, pero agrega funciones adicionales para la animación, como el siguiente fotograma() función. Entonces, si no está seguro de si debe extender MovieClip o Sprite, vaya a MovieClip, ¡es más seguro!)

La línea 'importar' le dice a Flash dónde encontrar el MovieClip real para que podamos extenderlo.

MovieClip es en sí mismo una clase.

Flash no realiza un seguimiento automático de dónde se almacenan todos sus archivos de clase; para nuestro amplía MovieClip Para que funcione el código, debemos indicar a Flash dónde encontrar la clase MovieClip. Eso es lo que el importar la línea hace.

Las declaraciones de importación siempre van dentro del paquete y fuera de la clase, en la parte superior.

Cada clase contiene una función con el mismo nombre que la clase. El código en su interior se ejecuta cuando se crea un objeto de este tipo de clase, en nuestro caso, cuando se carga el SWF.

Cada clase contiene una función con el mismo nombre que la clase. Se llama el constructor función.

Todo el código dentro de esta función se ejecuta cuando se crea un objeto de este tipo de clase; en nuestro caso, el código entre estas llaves se ejecutará cuando se cargue el SWF..

No te preocupes si sientes que todavía no entiendes todo esto. Una vez que comience a usar clases y escriba las suyas, todo encajará en su lugar.


Paso 6: Hazlo hacer Alguna cosa

Como dije en el Paso 5, la función constructora contiene el primer código que se ejecutará cuando se cargue su SWF. Así que pongamos algo allí para asegurarnos de que todo funcione:

 paquete import flash.display.MovieClip; La clase pública Main extiende MovieClip función pública Main () trace ("Sí, está funcionando"); 

La línea 8 es la única nueva allí. Pruebe su SWF de la forma habitual (Control> Probar Película). Si todo está bien, debería ver la ventana emergente "Sí, está funcionando" en el panel Salida. Si no…

  • Has guardado el cambio que hiciste en Main.as?
  • ¿La clase de documentos de tu FLA está establecida en Principal?
  • ¿Está probando definitivamente la película Example.fla??

Si ninguna de estas preguntas ayuda, por favor publique un comentario..


Paso 7: Intenta algo un poco más complejo

Intenta reemplazar tu código Main.as con esto:

 paquete import flash.display.MovieClip; public class Main extiende MovieClip public function Main () var greeting: String = "Hello"; traza (saludo); 

Simple, ¿verdad? Acabamos de crear una nueva variable de cadena dentro de la función de constructor. Ahora vamos a agregar una nueva función:

 paquete import flash.display.MovieClip; public class Main extiende MovieClip public function Main () var greeting: String = "Hello"; changeGreetingToFrench (); traza (saludo);  función pública changeGreetingToFrench (): void greeting = "Bonjour"; 

Hay algunas cosas a tener en cuenta aquí.

En primer lugar, la nueva función va dentro de la clase, y después el constructor - por convención, el constructor es la primera función en la clase.

En segundo lugar, la nueva función es público; al codificar dentro de una clase (y no en la línea de tiempo) es una buena práctica poner "público" (o "privado" o "protegido", pero los dejaré para otra publicación) al comienzo de la línea que define la función . Es solo una forma de hacer saber a otras clases si pueden o no tener acceso a ellas..

En tercer lugar, la definición de la nueva función termina con :vacío. Esto solo significa que no devuelve un valor. Las funciones del constructor no necesitan :vacío porque ellos hipocresía devolver un valor.

Si prueba esta película, recibirá un mensaje de error:

Main.as, línea 15: 1120: acceso de saludo de propiedad no definida.

Cuando crea una variable dentro de una función, otras funciones no pueden acceder a ella. Si desea que todas las funciones de la clase puedan acceder a la variable, debe declararla dentro de la clase pero fuera de todas las funciones:

 paquete import flash.display.MovieClip; clase pública principal extiende MovieClip saludo de var público: String = "Hola"; función pública Main () changeGreetingToFrench (); traza (saludo);  función pública changeGreetingToFrench (): void greeting = "Bonjour"; 

Al igual que con las funciones, si declara una variable fuera de una función, debe comenzar con "público" (o "privado" o "protegido"). A diferencia de las funciones, las variables deben definirse. encima el constructor.

Prueba tu película ahora y finalmente debes recibir un bonito saludo en francés. Qué util!


Terminando

Por lo tanto, este no es exactamente un resultado emocionante, pero esperamos que ahora puedas seguir los tutoriales que no están codificados en la línea de tiempo.

Realmente quiero asegurarme de que todos entiendan cómo usar una clase de documentos, así que, si algo de esto no está claro, publique una nota en los comentarios. Una vez que hayamos solucionado la confusión, editaré la Sugerencia rápida para facilitar la comprensión de la siguiente persona. Gracias :)