Estructura de una clase menos básica:
Transcripción
Estructura de una clase menos básica:
Las clases en ActionScript 3.0 Muchos diseñadores se quedaron un poco helados al ver el cambio que introdujo Adobe con ActionScript 3.0. En principio tiene dos consecuencias principales: ActionScript pasa a ser un lenguaje orientado a objetos, con cara y ojos ( tipo Java ) Nos va a ofrecer más posibilidades de desarrollo. Incluso acceder a clases de terceros A pesar de que para los desarrolladores que estuvieran acostumbrados a AS 2.0 es un cambio radical, el cambio merece la pena y no es tan duro como pueda parecer al principio. Las clases no dejan de ser “código de ActionScript almacenado en un archivo diferente al fla, con la extensión as, y que de una manera u otra cuando publiquemos la película, se va a incorporar al fla para poder generar el archivo swf. Estructura de una clase básica: A nivel de sintaxis, un archivo de clase en ActionScript debe seguir un guion. Básicamente podríamos escribir la estructura de una clase de la siguiente manera: package { public class Saludo { public function Saludo() { trace("hola"); } } } Si guardamos la clase en la misma carpeta que nuestro fla, luego en el código del mismo sólo tendremos que poner: var saludo:Saludo = new Saludo(); Estructura de una clase menos básica: 1. palabra “package” 2. imports ( cualquier objeto que queramos utilizar en una clase, debe ser importado, ej. si vamos a utilizar un campo de texto, deberemos decir import.flash.text.TextField; ) 3. declaración de clase, que es el código que nos indica el nombre de clase que creamos, y si va a ser una ampliación de alguna existente ( public class Firma extends MovieClip ). En éste caso, lo que hacemos es que nuestra clase firma, obtenga todo el código de la clase MovieClip. Normalmente para crear una clase base, como en el primer ejemplo, siempre aprovecharemos alguna clase de nivel superior, como Sprite, o MovieClip. OJO, el nombre de la clase, siempre va en mayúscula, y en principio lo normal es que sea pública. 4. declaración de variables, u objetos que vayamos a utilizar en nuestra clase. public var miTexto:TextField = new TextField(); 5. función constructora (function Firma() ), tiene que tener el mismo nombre que la clase, , aunque no es obligatorio crearla. OJO, la función constructora nunca devolverá datos, por lo que al poner por ej. public function Firma():void, nos protestaría. Por otro lado en flash no es obligatorio crear una función constructora. 6. resto de funciones si nos hicieran falta ( aquí muchas veces es donde pondremos los getters y los setters, pero eso es un tema que ya llegará. El código de ejemplo para el archivo Firma.as sería: package { import flash.display.MovieClip; import flash.text.TextField; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.net.navigateToURL; public class Firma extends MovieClip { private var container:MovieClip = new MovieClip(); private var miTexto:TextField = new TextField(); private var link:URLRequest = new URLRequest("http://www.josebalaguer.com"); function Firma() { miTexto.text = "mi empresa"; addChild(container);// el addChild nos permitirá que se visualice el MovieClip container.buttonMode = true; container.useHandCursor = true; container.addChild(miTexto); miTexto.width = 300; miTexto.selectable = false; container.addEventListener(MouseEvent.CLICK, linkar); container.x = 200; container.y = stage.stageHeight-15; } private function linkar(e:MouseEvent):void{ navigateToURL(link); // nota, como no ponemos nada nos lanzará el link en una nueva ventana del navegador, al revés que en AS 2.0 } } } Cómo asociar una clase a nuestro documento de Flash. Las clases no dejan de ser “código de ActionScript almacenado en un archivo diferente al fla, con la extensión .as, y que cuando publiquemos, se va a incorporar al fla para generar el archivo swf ( small web format ). Hasta aquí todo va bien, puesto que ya sabemos programar, lo único que queda es saber cómo asociamos la clase a nuestro fla, y cómo es la sintáxis en una clase. Tenemos diferentes maneras de hacerlo, en base a cómo sea nuestro archivo de clase: 1. Asociándo directamente la clase a nuestro fla desde el inspector de propiedades: Si nos fijamos hay un panel de entrada de texto “Clase o Document Class”. Aquí es donde debemos meter el nombre del archivo de clase precedido de la ruta. Si tenemos organizado en varias carpetas ( paquetes ) tendremos que indicar todo el path, por ej. com.utils.Firma Por ejemplo, vamos a crear una clase sencilla, que añada a nuestra página nuestra firma, para que puedan linkar a nuestra web. En primer lugar creamos un archivo nuevo de ActionScript, le ponemos el nombre, (una característica de las clases, para diferenciarlas es que van con mayúscula ) y lo guardamos en éste caso en el mismo directorio en el que tenemos el archivo fla. Una vez tengamos el código, guardamos la clase, y en el inspector de propiedades escribimos Firma ( no hay que poner la extensión .as ). Nota: en éste caso es muy importante que nuestro archivo de clase extienda a la clase de MovieClip, puesto que flash no admite como clase base de un fla, una clase que no extienda a la clase Movie Clip 2. Importándolo desde la línea de tiempo Ej. import com.utils.Firma; Nota: siempre que creemos una instancia de cualquier clase y queramos que aparezca en la escena, deberemos añadirla a la lista de visualización ( Display List ) mediante el método addChild. En la imágen anterior añadimos la instancia de Firma al escenario La principal diferencia es que en éste caso la clase no actua como clase base del fla, y por lo tanto no hace falta que extienda a la de MovieClip. Podemos importar las clases que necesitemos, aquí no hay limitación Podría por ejemplo tener una carpeta de utilidades, otra de gráficos, otra de efectos de rollOver, e incluso dos clases con el mismo nombre, pero en diferentes carpetas, lo cual las hace diferentes, puesto que están en distintos paquetes. 3 . Asociando la clase a un MovieClip, o botón de la librería. En la librería seleccionamos el símbolo, le damos al botón de propiedades, y escribimos un nombre de clase en primer lugar, y en segundo ponemos el nombre de la clase que queremos asociar al símbolo. En éste caso, el campo Clase nos sirve para poder crear instancias por programación. Esto sirve para lo mismo que servía antes el “Linkage”. Respecto al campo Clase base, es el que le dará las propiedades, funciones o métodos que hemos creado en el archivo de clase. En nuestro caso como ejemplo hemos puesto únicamente un filtro de sombra: package com.utils{ import flash.filters.DropShadowFilter; import flash.display.SimpleButton; public class Sombra extends SimpleButton{ var sombrita:DropShadowFilter; public function Sombra(){ sombrita = new DropShadowFilter(4,45,0,1,5,5,1,3) this.filters = [sombrita]; } } } ¿Cómo lo inserto en el escenario mediante programación?, Con estas dos líneas de código lo que hago es por un lado inicializar o instanciar el objeto, y por otro lado decirle al escenario que quiero que salga el cubo. Si no digo nada más, lo pondrá en el punto x = 0, y = 0; En éste caso lo coloco modificando su propiedad x y su propiedad y. Respecto a “Base class”, aquí es donde puedo asociarle una clase que haya creado, por ejemplo para crear un efecto de rollOver y ahorrarme tiempo. Todas las instancias que añada al escenario, y que tengan como Base class “Sombra”, ejecutarán ese código. El ahorro en tiempo es algo parecido a lo que ocurre con las hojas de estilo. Puedo por ejemplo crear una clase para añadir un efecto de sonido en todos los botones que tenga en el escenario. En Resumen: Clase base del documento: se insertará con el inspector de propiedades Clase para añadir funcionalidad: se importará ( salvo que esté en la misma carpeta que el fla ) Clase para añadir funcionalidad a un símbolo: En el inspector de propiedades, la pondremos como clase base para ese símbolo clase aplicada a un símbolo de la librería Clase aplicada a nuestro documento como clase base Por último para aquellas clases que no sean la clase base, utilizaremos el método import indicando la ruta de carpetas donde esté nuestra clase: import com.utils.Firma; Nota: con el import no hay que poner la extensión de la clase. Por otro lado si la clase está en la misma carpeta que el fla, tampoco hará falta el import. Cómo creamos una instancia de nuestra clase La instancia la crearemos de la misma forma que se crean la mayoría de instancias en Flash: var miFirma:Firma = new Firma(); El nombre que está en gris es el nombre de instancia, y evidentemente puede variar. Siempre es recomendable que empiece por minúscula para no confundirlo con una clase. Si tiene más de una palabra lo normal también es empezar la siguiente con mayúscula ( camel notation );