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 );

Documentos relacionados